跳过for循环的某些迭代

时间:2016-03-30 16:36:53

标签: java for-loop

我正在编写一个for循环来浏览一个包含38个元素的2D。但是,其中一些元素为null,我希望for循环简单地跳过它们(因为在我解决的难题中,它们没有与它们相关的移动)。快速搜索显示我可以在continue循环开头的if语句中跳过带有简单for语句的迭代。但是,我想跳过多次迭代,我写的if语句不起作用:

for (int i = 0; i < triplets.length; i++) {
    if (i == 18 || 19 || 25 || 26 || 28 || 29 || 31 || 32) {
        continue;
    }

是否可以选择制作8个单独的if语句,还是我坚持使用它?

2 个答案:

答案 0 :(得分:5)

你没有正确地给出这个条件。它应该是这样的:

if (i == 18 || i == 19 || i == 25 || i == 26 || i == 28 || i == 29 || i == 31 || i == 32) {
    continue;
}

或者,我建议你做一些这样的事情:

  1. 创建HashSet并将要比较的值放入其中。

  2. 检查HashSet是否包含i,如果是,则继续循环。

    Set<Integer> set = new HashSet<>();
    set.add(18);
    set.add(19);
    set.add(25);
    set.add(26);
    set.add(28);
    set.add(29);
    set.add(31);
    set.add(32);
    
    if(set.contains(i)) {
        continue;
    }
    

答案 1 :(得分:2)

  

是否可以选择制作8个单独的if语句,还是我坚持使用它?

您可以创建排除List并在当前三元组不存在时执行您的代码(代码在没有continue调用的情况下更简洁)。

List<Integer> exclude = Arrays.asList(18, 19, 25, 26, 28, 29, 31, 32);
for (int i = 0; i < triplets.length; i++) {
    if (!exclude.contains(i)) {
        ....//your code
    }
}

如果排除列表较大,则最好将ArrayList替换为HashSet,其中 O(1)搜索复杂度而不是 O (N)(但每个元素消耗大约5.5 times more memory