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)
答案 0 :(得分:0)
while循环中的条件计算为字符串比较,在这种情况下,它将始终返回true
值。结果是无限循环,因为k
变量保持递增,当超出数组大小限制时,索引指针将导致出界异常。
while(pred[k]!="\0")
尝试使用length属性进行评估。
while(k < pred.length )