0

好的,所以我有了如何检查重复项的概念,因为我正在做一个项目,其中包括不将多个值推送到堆栈上。到目前为止,我的代码是标准的,将扫描仪保存到字符串,将字符串保存到数组,然后是这个 while 循环。

int c=0;
  while(counter < inAr.length)
  {
     String w1 = inAr[c];
     String w2 = inAr[c + 1];
     if(w1 != w2)
     {
        counter++;
        so.push(inAr[c]);
        c++;
        temp++;
     }
     else
     {
        counter++;
        c++;
     }
  }

好的,那么问题来了。我得到了 inAr[c + 1] 的 arrayindexoutofbounds,但我没有得到的是 inAr[1]、inAr[2] 等等所有的值。如果我将 [c + 1] 替换为 [1] 之类的常量,则程序运行良好并且可以正常工作....我现在很迷茫,谁能提供一些帮助

4

3 回答 3

3

考虑当 时的情况c = inAr.length-1

此时我们将进入您的 while 循环(假设初始化为 0,c并且counter在每次迭代中具有相同的值)

inAr[c+1]真的是inAr[inAr.length]哪一个总是越界。

修复:将循环更改为while(counter < inAr.length - 1)或将计数器初始化为 1。

编辑:您也不应该将字符串与==or进行比较!=。你的 if 语句应该是:

if(!w1.equals(w2))

但这与实际问题无关,可能会在以后引起问题。

于 2013-10-01T20:23:58.200 回答
0

这意味着您正在尝试访问数组中的元素,例如。数组长度为 10,您正在尝试访问索引 11

于 2013-10-01T20:25:04.030 回答
0

您的代码不是在循环开始时中断,而是在循环结束时中断。

c在检查条件时总是等于counter,最终,counter将等于inArr.length- 1。并且c + 1将等于inArr.length

由于数组总是从 index 开始0(而不是1),所以当你执行类似的东西时总是会出现异常

mystr = inAr[inArr.length]

您在while循环的最后一次迭代中有效地执行了该操作。

于 2013-10-01T20:27:04.900 回答