2015-01-17 2 views
0

Я пытаюсь использовать этот метод для преобразования числа в любой базе до десятичной.Преобразование числа в любой базе до десятичного в Java

public static int convertToDecimal(String str, int base){ 

     int v = 0; 
     int total = 0; 
     int pow = 0; 
     str = str.toUpperCase(); 
     for(int i = str.length(); i > -1; i--){ 
      char c = str.charAt(i); 
      if (c >= '0' && c <= '9') { 
       v = c - '0'; 
      }else if (c >= 'A' && c <= 'Z'){ 
       v = 10 + (c - 'A'); 
      } 
      total += v * Math.pow(base,pow); 
      pow++; 
     } 
     return total; 
    } 

Но в итоге я получаю массив вне исключения. Что я здесь делаю неправильно?

ответ

2

Как @HovercraftFullOfEels уже отмечено. Строки основаны на нулевом значении. Вы начинаете с i=str.length(), который выдает ArrayIndexOutOfBoundsException, поскольку наибольший возможный индекс равен i=str.length()-1.

public static int convertToDecimal(String str, int base) { 
    int v = 0; 
    int total = 0; 
    int pow = 0; 
    str = str.toUpperCase(); 
    for (int i = str.length() - 1; i >= 0; i--) { 
     char c = str.charAt(i); 
     if (c >= '0' && c <= '9') 
      v = c - '0'; 
     else if (c >= 'A' && c <= 'Z') 
      v = 10 + (c - 'A'); 
     total += v * Math.pow(base, pow); 
     pow++; 
    } 
    return total; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^