【发布时间】:2015-08-19 23:10:22
【问题描述】:
pred[] 是一个字符数组,作为用户的输入。预期的输入形式为谓词(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 应该是什么意思?你在检查行尾吗?
-
while 循环开始 while(pred[k]!="\0"){
-
不应该是n吗?你也不能使用数组的长度吗?喜欢 ->
while(k < pred.length - 1)? -
因为数组 pred 中有 10 个元素,但你正在执行不存在的 pred[11]
-
pred是 char 数组还是 String 数组?如果它实际上是一个 char 数组,那么比较"\0"是完全没有意义的——而且 Java 无论如何也不使用以 null 结尾的字符串。