繁体   English   中英

测试数组中的元素是否相等,而与顺序或频率无关

[英]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一个元素进行双循环测试,一旦找到

  • 将该条目设置为null(如果是重复条目)
  • 增加计数器(我稍后将使用该计数器来比较计数为找到的条目数是否等于数组中的条目数,从而使数组相等)
  • 并增加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM