Java 为什么我的输出抛出异常,而我只(似乎)更改变量?

Java 为什么我的输出抛出异常,而我只(似乎)更改变量?,java,output,Java,Output,我正在为考试而学习。 我试图理解为什么输出4在5工作时抛出异常,因为f来自类型C1_A 错误4抛出: 主线程java.lang中出现异常。错误:未解决的编译问题: mt_A无法解析或不是字段 在C1_O.main C1_O.java:15 public class C1_A { static int [] a = {4,3,2,9}; public int mt_A(int b) { int[] a = {31,30,29}; return(a[b

我正在为考试而学习。 我试图理解为什么输出4在5工作时抛出异常,因为f来自类型C1_A

错误4抛出: 主线程java.lang中出现异常。错误:未解决的编译问题: mt_A无法解析或不是字段 在C1_O.main C1_O.java:15

public class C1_A {
    static int [] a = {4,3,2,9};
    public int mt_A(int b) {
        int[] a = {31,30,29};
        return(a[b]);
    }
}

public class C1_O {
    public static void main (String args[]){
        int a=2;
        int b=2;
        int c=a;
        int d;
        C1_A f = new C1_A();
        a = C1_A.a[b];
        System.out.println(a); //Output 1
        System.out.println(c); //Output 2
        System.out.println(f.mt_A(a)); //Output 3
        C1_A.a[c+1]= 2;
        d=C1_A.a[c-1];
        System.out.println(f.mt_A(d)); //Output 4
        System.out.println(f.mt_A(C1_A.a[3])); //Output 5
    }
}

输出3对我来说应该是29

输出4中断,因为d=C1_A.A[c-1]之后的d=3; 这意味着您尝试引用数组的第四个索引,该索引只有3个元素。 这就是为什么会出现ArrayIndexOutOfBounds异常

因为静态数组被C1_A.A[c+1]=2修改,所以五个工作良好; 这使得第三个元素=2。所以C1_A.A[3]==2,而不是9。
所以输出5是29。

拿一张纸和一支笔,写下表中所有变量的初始值,并根据程序填充该表。这是一个橡皮鸭调试的完美示例:您将在//Output 3 bcz后面的行中得到一个错误,您正试图为静态变量赋值variable@GBlodgett据我所知,输出5不会抛出错误。您的输出4失败,因为数组长度为3表示最大索引为2。但是你正在传递一个值为3的d。此索引不存在,因此出现ArrayOutofbounds异常。