2014-12-13 2 views
3

Я новичок в Java и работал под кодом, который работает нормально, но я получаю индекс массива из связанного исключения. Может кто-то, пожалуйста, помогите понять, почему я получаю это исключение?Индекс массива Java из связанного 4

public class array { 
    public static void main (String[] args) 
    { 
    int[] b = {1,2,3,4}; 
    array ar = new array(); 
    ar.process(b); 
    } 
    public int process (int[] a) 
    { 
    int i; 
    System.out.println("Length is: " +a.length); 
    for(i = 0; i < a.length ; i++) { 
    System.out.println("A is : " + a[i] + " I is" +i);   
    } 
    return a[i]; 
    }   
    } 

Exception 

Length is: 4 
A is : 1 I is0 
A is : 2 I is1 
A is : 3 I is2 
A is : 4 I is3 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 
     at array.process(array.java:17) 
     at array.main(array.java:7) 

ответ

3

Проблема эта линия:

return a[i]; 

Поскольку она находится вне for петли и я стал 4.

Вы можете сделать это:

return a[i-1]; 

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

1

При запуске ваш оператор возврата, то цикл закончил так i равна длине массива a (который один мимо действительного индекса). Измените оператор возврата, как

return a[a.length - 1]; // <-- for the last element in the array. 

Конечно, вы не используете возвращаемое значение, так что вы можете просто сделать метод недействительным и не возвращают ничего. Вы также можете сделать метод статическим, так как вы не используете какие-либо поля экземпляра (тогда вам не понадобится экземпляр array ... Соглашение об именах в Java будет состоять в том, чтобы использовать имена классов, но не называйте свой класс Array) ,

0

Если вы ждете последнего значения в качестве вашего возвращаемого значения, то вы не можете использовать i в качестве индекса массива, потому что в течение цикла, когда i значение становится 4i == a.lenth для т.е. выполнения цикла тормозов. вы не можете получить доступ к элементу, который, имеющий индекс, равный длине массива ..

Модифицированный код:

public class array { 
    public static void main (String[] args) 
    { 
    int[] b = {1,2,3,4}; 
    array ar = new array(); 
    ar.process(b); 
    } 
    public int process (int[] a) 
    { 
    int i; 
    System.out.println("Length is: " +a.length); 
    for(i = 0; i < a.length ; i++) { 
    System.out.println("A is : " + a[i] + " I is" +i);   
    } 
    return a[a.lenght-1]; // if you want last element as return value 
    }   
    } 
+0

Большое спасибо, ребята, для объяснения этого вопроса. Изменение выражения return (return a [i] - 1) работало для меня. – codeninja

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