测试数组中的元素是否相等,无论顺序或频率如何

时间:2017-01-29 03:55:11

标签: java arrays for-loop

我有多个测试数组必须通过我正在编写的方法。我不能为我的生活弄清楚为什么这会失败。

以下是代码:

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计数器。我假设一旦j计数器递增,i for循环就不会重置。我试图在j = 0之后设置counter++,但这样做会使用i的ArrayOutOfBounds打破程序,因为上帝知道是什么原因。

编辑:我刚才意识到为什么它超出了j=0的范围。循环找到最后一个条目,设置j,但也将i增加到5 ......我想?仍然不确定如何让这个测试运行我想要的方式。

2 个答案:

答案 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;                
            }
        }
}