【问题标题】:Index out of bound exception in javajava中的索引越界异常
【发布时间】: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 结尾的字符串。

标签: java algorithm exception


【解决方案1】:

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

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

尝试使用长度属性进行评估。

while(k < pred.length )

【讨论】:

    猜你喜欢
    • 2018-11-19
    • 2013-03-30
    • 2013-03-05
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多