我正在编写一个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
语句,还是我坚持使用它?
答案 0 :(得分:5)
你没有正确地给出这个条件。它应该是这样的:
if (i == 18 || i == 19 || i == 25 || i == 26 || i == 28 || i == 29 || i == 31 || i == 32) {
continue;
}
或者,我建议你做一些这样的事情:
创建HashSet
并将要比较的值放入其中。
检查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)