2013-10-23 64 views
-1

我正在尝试运行此代码,并且我一直收到ArrayIndexOutOfBound异常错误。Java ArrayIndexOutOfBound异常

public class Heisenberg { 
public static void main(String[] args) { 
    int[] array1 = new int[5]; 
    int[] array2 = new int[5]; 

    Ext(-1, 10, array1, array2); 
    } 

public static void Ext(int q, int w, int[] e, int[] r) { 
    if (q >= 0) 
     e[q] = w; 
     r[q] = w; 
    } 
} 

我对数组有点不熟悉,所以对所有帮助表示赞赏。 enter code here

回答

7

您的问题是,如果没有括号,在if适用以下语句:

if (q >= 0) 
    e[q] = w; 
    r[q] = w; // <---- here you get ArrayIndexOutOfBound Exception 

添加像括号:

if (q >= 0){ 
    e[q] = w; 
    r[q] = w; 
} 
1

将用于打开和关闭括号如果条件。

0

错误是在下面的行发生:

- [R [Q] = W;

由于这是出于if块,q的值是-1这是导致错误。

移动成如果块:

if (q >= 0){ 
    e[q] = w; 
    r[q] = w; 
} 

干杯!!

0

您使用参数q调用方法Ext,其值为-1。然后你访问r[q] = w;,其中-1未定义(大小为5的数组在索引0-4上定义)。

为什么你存在?

if (q >= 0) 
    e[q] = w; 
    r[q] = w; 

这意味着,如果语句是为e[q] = w; 只有进行比较,如果你想拥有所有if语句,你需要加括号覆盖的代码。如果在if语句中没有大括号,则只有第一个任务连接到该条件:

if (q >= 0){ 
    e[q] = w; 
    r[q] = w; 
}