【问题标题】:Not able to find aray index out of bound exception cause [duplicate]无法找到超出范围异常原因的数组索引[重复]
【发布时间】:2020-03-20 17:22:32
【问题描述】:
for(int i = q.length-1; i >= 0; i--){
        if(q[i] != i+1){
            try{
                if(((i-1)>=0) & (q[i-1] == (i+1))){

                    steps++;
                    q[i-1] = q[i];

                    q[i] = i+1;
                    System.out.println("here "+i);
                }
                if(((i-2) >=0) & (q[i-2] == (i+1))){

                    q[i-2] = q[i-1];
                    q[i-1] = q[i];
                    q[i] = i+1;
                    steps += 2;
                }else{
                    System.out.println("Too chaotic");
                    return;
                }
            }catch(Exception e){
                System.out.println("error at the " +i + " exception" +e);
            }
        }
    }
    System.out.println(steps);

* 我得到的最后一个值是 1。我试图在 if 条件下打印 i,它正在将 i 值打印为 1,直到最后一行。现在,我不明白异常发生在哪里? *

【问题讨论】:

  • 堆栈跟踪是否没有告诉您异常所在的行?
  • 你能把q有的对象放吗?
  • 您使用的是按位&。你想要逻辑&&吗?
  • 是的,这可能是你的错误。如果 if 语句的计算结果为 true,则意味着您将尝试在下一行访问 q[-1]
  • 非常感谢大家的回复。我是编程新手,犯了一个愚蠢的错误。 @JohnnyMopp 您的建议是正确的,一旦我将其更改为 && 错误就消失了。谢谢!

标签: java arrays indexoutofboundsexception


【解决方案1】:

在第二个嵌套 if 语句中,您尝试访问 q[i-2]。但是您只有在检查i - 2 >= 0 之后才尝试这样做,对吗?错误的!您使用了按位与 (&) 而不是逻辑与 (&&)。

if(((i-2) >=0) & (q[i-2] == (i+1)))

如果是逻辑与,如果i - 2 小于0,则不会检查语句中的下一个条件,从而阻止访问q[i - 2]。由于它是按位与,因此两个操作数都将被计算,并且 在 i = 1 处对 q[i - 2] 的计算会导致数组索引超出范围异常。

这就是为什么 i 的最后一个值是 1。

这是引发异常的充分理由,但同样的问题仍然存在于第一个嵌套 if 语句中。如果您在另一个方向遍历数组或者i = 1 没有问题,则可能是由这个引起的。因此,为了防止这个错误,你应该把这两个&都改成&&

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 2015-02-11
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多