我有多个测试数组必须通过我正在编写的方法。我不能为我的生活弄清楚为什么这会失败。
以下是代码:
for (int i = 0; i < testArray1.length; i++) {
for (int j = 0; j < testArray1.length; j++){
if (testArray1[i].equals(testArray2[j])){
System.out.println(testArray1[i]);
testArray2[j] = null;
counter++;
i++;
}
}
}
我要做的是对testArray1
中的一个元素进行双循环测试,一旦找到它就
i
以便跳转到下一个条目,因为其余条目不需要进行测试这样做我得到了输出:
Bag{Size:4 [Jill] [John] [Jack] [Jack] }
Bag{Size:4 [Jack] [Jill] [John] [Jack] }
Jill
John
Jack
counter: 3 Array size: 4
我的问题是,最后和最后的Jack
条目都没有经过测试。
另一件事是,我不确定我是否应该重置我的j
计数器。我假设一旦j
计数器递增,i
for循环就不会重置。我试图在j = 0
之后设置counter++
,但这样做会使用i
的ArrayOutOfBounds打破程序,因为上帝知道是什么原因。
j=0
的范围。循环找到最后一个条目,设置j
,但也将i
增加到5 ......我想?仍然不确定如何让这个测试运行我想要的方式。
答案 0 :(得分:0)
只是为了更好地解释 -
Bag{Size:4 [Jill] [John] [Jack] [Jack] } Bag{Size:4 [Jack] [Jill] [John] [Jack] } JillJillJillJill i=0, j=1 nullnullnullnull and you do a i++ , so i=1, counter = 1 JohnJohnJohnJohn i=1, j=2, counter = 2 nullnullnullnull and you do a i++ , so i=2, counter = 2 JackJackJackJack i=2, j=3, counter = 3 nullnullnullnull and you do a i++ , so i=3, counter = 3 counter: 3 Array size: 4
最外层的循环不会第二次执行此操作(注意上面的所有迭代都是来自你的内部循环),因为在循环中有另一个增量网i++
并{\ n} i=4
退出循环。
希望有所帮助。
编辑 - 上面分享的输出似乎已经改变了问题,但仍需要纠正的逻辑。
答案 1 :(得分:0)
我认为问题围绕着对此调查的混淆
并增加
i
,以便跳过剩余的下一个条目 那些不需要测试
在if语句中递增i
不会结束当前循环,您将继续转到testArray1
中的下一个条目。它只会递增i
并继续检查testArray2
的其余部分。如果你想继续testArray1
中的下一个条目,你应该使用break
语句来循环迭代testArray2
,如此,
for (int i = 0; i < testArray1.length; i++) {
for (int j = 0; j < testArray1.length; j++){
if (testArray1[i].equals(testArray2[j])){
System.out.println(testArray1[i]);
testArray2[j] = null;
counter++;
break;
}
}
}