2015-02-28 2 views
-1

Я знаю C, а теперь пытаюсь наклонить Java.Исключение при печати массива в Java

Вот простая программа, которая проходит через цикл и меняет свойства в массиве «str». когда я пытаюсь напечатать его так, как я делал на C, он работает, но также дает мне исключение. почему это?

public class ReverseStringLG { 

    public static void main(String[] args) { 
     char[] str={'A', 'B', 'C', 'D', 'E', 'F'}; 
     char[] strLG={'L', 'G', 'L', 'G', 'L', 'G'}; 

     int i, j, k=1; 

     for(j=0, i=str.length-1;i>j;j++, i--) 
     { 
     char tmp; 
     tmp=str[j]; 

     if(j%2==0) 
      str[j]=strLG[j]; 
     else 
      str[j]=str[--i]; 

     str[i++]=tmp; 
     k++; 
     } 
     for(i=0;i<=str.length;i++) 
     { 
      System.out.printf("%c\n", str[i]); 
     } 
    } 

} 

вот консоль:

enter image description here

ответ

3

Изменить это for(i=0; i<str.length; i++)

Вы не должны пытаться получить доступ к элементу по индексу str.length.

+0

Почему я должен удалить «=»? – VSG24

+0

@ VSG24: Поскольку '<=' будет продолжать значение 'str.length', тогда как '<' остановит только * до * значение 'str.length'. Поскольку 'str.length' всегда 1 больше последнего индекса' str', вы хотите остановить повторение цикла до этого значения. – David

+0

@ VSG24 И btw, это в основном то же самое в C. Там вам также нужно остановиться, прежде чем вы достигнете длины. –

0

Попробуйте это:

Используя усовершенствованный цикл, это должно быть легко:

for(String string:str){ 
System.out.printf("%c\n", string); 
} 
1

Поскольку массив начинается с индекса 0, i никогда не может быть такой же, как str.length, так как индекс в массив для значения str.length не существует, его всегда один меньше, вот почему вы получаете ArrayIndexOutOfBoundsException.

for(i = 0;i <= str.length;i++) { 
    System.out.printf("%c\n", str[i]); 
} 

Это должно быть

for(i = 0;i < str.length;i++) { 
    System.out.printf("%c\n", str[i]); 
} 
0

В этом цикле:

for (i = 0; i <= str.length; i++) { 
     System.out.printf("%c\n", str[i]); 
    } 

Вы итерация за границей массива. Если длина равна 6, это будет посещать str[0], str[1], ..., str[6], так что 7 элементов, но у вас есть только 6. Это не сработало бы в C.

Исправления изменить <= строгую <, потому что вы не хотите, чтобы посетить str.length ей элемент:

for (i = 0; i < str.length; i++) { 
     System.out.printf("%c\n", str[i]); 
    } 

Еще лучше, использовать улучшенный синтаксис цикла:

for (char c : str) { 
     System.out.printf("%c\n", c); 
    } 

Таким образом, не может быть больше смешивания с индексом массива.

0

Как указано в других ответах, вы пытаетесь получить доступ к индексу, превышающему последний индекс строки.

Для дальнейшего использования обратите внимание, что исключение указывает, в какой строке оно встречается в (26), и имеет имя ArrayIndexOutOfBoundsException, которое по значению лица описывает ошибку, но может использоваться с Javadoc для получения еще большей информации об этом ошибка.

Если вы поместите контрольную точку отладчика в строку 26 в своей среде IDE, вы сможете точно увидеть, какое значение вызывает исключение.

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