好的,所以我有关于如何检查重复项的概念,因为我正在做一个包含不将多个值推送到堆栈的项目。到目前为止,我的代码是标准的,将扫描器保存到字符串,将字符串保存到数组,然后这个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],等等所有保持值。如果我用[1]之类的常量替换[c + 1],程序就可以正常运行....我此时已经迷失了,有人可以提供一些帮助吗
答案 0 :(得分:3)
考虑c = inAr.length-1
时的情况。
此时我们将进入你的while循环(因为c
和counter
在每次迭代时具有相同的值,假设初始化为0)
inAr[c+1]
真的是inAr[inAr.length]
,它总是超出界限。
FIX:将循环更改为while(counter < inAr.length - 1)
或将计数器初始化为1。
编辑:你也不应该将字符串与==
或!=
进行比较。你的if语句应该是:
if(!w1.equals(w2))
但这与实际问题无关,可能会在以后引起问题。
答案 1 :(得分:0)
这意味着您正在尝试从数组中访问元素,例如。数组长度为10,您尝试访问索引11
答案 2 :(得分:0)
你的代码在循环开始时没有中断,而是在循环结束时。
选中条件后, c
始终等于counter
,最终counter
将等于inArr.length
- 1. c + 1
将相等到inArr.length
由于数组始终从索引0
开始(而不是1
),因此当您执行
mystr = inAr[inArr.length]
您在while
循环的最后一次迭代期间实际执行的操作。