2015-11-13 106 views
3

我只是工作的一個簡單的程序很容易與循環和while循環, 和ArrayIndexOutOfBoundsException發生。如何解決此代碼中的ArrayIndexOutOfBoundsException?

這裏是我的代碼:

public class ForWhileLoops 
{ 
    public static void main(String[] args) 
    { 
    int[] mary = new int[30]; 

    for(int a = 0; a < 31; a++) 
    { 
     mary[a]= a*3; 
    } 
    for(int b = 0; b < 31; b++) 
    { 
     System.out.println(mary); 
    } 
    int c = 0; 
    while(c < 31) 
    { 
     c++; 
     System.out.println(c); 
    } 
    } 
} 

這裏是所發生的錯誤:

java.lang.ArrayIndexOutOfBoundsException: 30 
    at ForWhileLoops.main(ForWhileLoops.java:9) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 
+0

有效的答案是低於,但如果您在打印瑪利亞陣列時看到30行垃圾文本,請勿混淆。例如,請參閱http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-a-java-array –

回答

5
int[] mary = new int[30]; 

數組索引從0開始。

因此,一個int[30]陣列將擁有有效的索引,從029

for(int a = 0; a < 31; a++)

在您訪問mary[30]最後一次迭代這是你的數組的邊界。

修復此通過

for(int a = 0; a <mary.length; a++)

替換它有了這個解決方案,如果你改變數組的大小,你不必改變for

+0

非常感謝! – maryt

7

使用

for int(a = 0; a < mary.length; a++) { 
    ... 
} 

mary.length產量30

你數組長度爲30個元素。然而,第一個元素是0,使得29是最後一個元素。

+0

非常感謝! – maryt

+0

如果它有幫助,你能將它標記爲正確答案嗎?在我的國家,他們驅逐年齡在20歲以下,並且名譽低於500的男孩。 –