在for循环中跳过一次迭代

时间:2015-04-30 00:48:36

标签: java iteration

如何跳过像这样的for循环的一次迭代:

for (int i = 65; i <= 90; i++) {
  if (!(i == 73)) {
    uniq.add((char) i);
  }
}

uniq应包含字母,不包括'I'。有没有其他方法可以解决这个问题?我刚刚开始使用Java,我试图尽可能简单地做到这一点。

3 个答案:

答案 0 :(得分:2)

在幕后,char只是0到65,535之间的数字(无符号short),这意味着您可以对char进行算术运算,甚至可以使用它们在循环中。这可以使很多文本繁琐的代码更容易阅读。考虑:

for (char c = 'A'; c <= 'Z'; c++) {
  if (c != 'I') {
    uniq.add(c);
  }
}

现在我们很清楚我们正在循环使用ASCII字母表,将每个char添加到列表中,并跳过'I'

作为@ C.B.我在评论中讨论过,你也可以这样做:

for (char c = 'A'; c <= 'Z'; c++) {
  uniq.add(c);
}
uniq.remove('I');

但是,根据您的数据限制,这可能会有问题。如果uniqList,则.remove()操作必须遍历整个列表,这不必要地浪费。

答案 1 :(得分:1)

直接执行以下代码应该有效。 使用此方法,您不需要知道相应的ACSII或Unicode字母表示。

for (int i = 'A'; i <= 'Z'; i++) {
  if (i != 'I') {
    uniq.add((char) i);
  }
}

答案 2 :(得分:0)

看起来你可能已经采用了最简单的方法之一。

更加冗长,但也许不那么优雅(虽然可以说是更容易阅读)的方式来完成同样的事情可能是这样的:

for (int i = 65; i < 73; i++) {
            uniq.add((char) i);
}

for (int i = 74; i <= 90; i++) {
            uniq.add((char) i);
}

当你编写源代码时,我喜欢认为你是为人而不是计算机而写。尽量强调可读性而非短缺。