【问题标题】:Why does my output throws an exception while I only (seemingly) change a variable? [duplicate]为什么我的输出会引发异常,而我只(看似)更改了一个变量? [复制]
【发布时间】:2018-09-21 17:59:31
【问题描述】:

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

错误 4 抛出: 线程“main”java.lang.Error 中的异常:未解决的编译问题: 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
    }
}

【问题讨论】:

  • 拿一张纸和一支笔,把所有变量的初值写在一个表格里,然后按照程序把表格填满。
  • 这是橡皮鸭调试的完美示例:en.wikipedia.org/wiki/Rubber_duck_debugging
  • 您将在 //Output 3 bcz 您尝试将值分配给静态变量之后的行中收到错误
  • @GBlodgett 输出 5 不会抛出错误(据我所知)
  • 您的输出 4 失败,因为您的数组长度为 3,这意味着您的最大索引为 2。但您传入的 d 值为 3。此索引不存在,因此出现 ArrayOutofbounds 异常。跨度>

标签: java output


【解决方案1】:

输出 3 对我有用(应该是 29)。

输出 4 个中断,因为在 d = C1_A.a[c-1]; 之后 d = 3
这意味着您尝试引用只有 3 个元素的数组的第 4 个索引。
这就是你得到ArrayIndexOutOfBounds 异常的原因。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2017-06-14
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多