在java中索引超出范围的异常

时间:2015-08-19 23:10:23

标签: java algorithm exception

pred []是一个char数组,作为用户的输入。预期的输入是表单谓词(param1,param2)。这个while循环用于检测谓词,param1和param2的开始和结束索引,但由于某种原因它会给出异常。

    int k =0;
    while(pred[k]!="\0"){
            System.out.println("k="+k);
            if ("(".equals(pred[k])) {
                param1_st = k + 1;
                pred1_end = k - 1;
            }
            if (",".equals(pred[k])) {
                param1_end = k - 1;
                param2_st = k + 1;
            }
            if (")".equals(pred[k])) {
                param2_end = k - 1;

            }
            k++;

        }

输出:

Enter a predicate 1
abd(sd,sdf)
Entered predicate is: abd(sd,sdf)
Enter a predicate 2
abd(x,db)
Entered predicate is: 
abd(x,db)k=0
k=1
k=2
k=3
k=4
k=5
k=6
k=7
k=8
k=9
k=10
Exception in thread "main" 
java.lang.ArrayIndexOutOfBoundsException:11
at unification.Unif.main(Unif.java:41)

1 个答案:

答案 0 :(得分:0)

while循环中的条件计算为字符串比较,在这种情况下,它将始终返回true值。结果是无限循环,因为k变量保持递增,当超出数组大小限制时,索引指针将导致出界异常。

while(pred[k]!="\0")

尝试使用length属性进行评估。

while(k < pred.length )