![](/img/trans.png)
[英]How to check if an array has squared elements of another array (regardless of order)?
[英]Testing if elements in an array are equal regardless of order or frequency
我有多个测试数组必须通过我正在编写的方法进行传递。 我无法为自己的一生弄清楚为什么会失败。
这是代码:
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
计数器。 我假设一旦递增i
计数器, j
for循环就不会重置。 我试图在counter++
之后将j = 0
设置j = 0
,但是这样做使ArrayOutOfBounds破坏了程序, i
知道这是什么原因。
编辑:我刚刚意识到为什么j=0
超出范围。 循环找到最后一个条目,将j
设置为1,但同时将i
增加到5 ...我认为呢? 仍然不确定如何使此测试按我的意愿运行。
为了更好地解释-
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
最外面的循环不会第二次执行此操作(请注意,以上所有迭代均来自您的内部循环),因为循环中还有另一个incremenet i++
,使得i=4
并退出了循环。
希望能有所帮助。
编辑 -这个问题似乎在上面共享的输出方面发生了变化,但是仍然需要纠正的逻辑仍然存在。
我认为问题是围绕这个询问的混乱
并增加
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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.