Java 在for循环中跳过一次迭代

Java 在for循环中跳过一次迭代,java,iteration,Java,Iteration,我如何跳过像这样的for循环的一次迭代: for (int i = 65; i <= 90; i++) { if (!(i == 73)) { uniq.add((char) i); } } for(inti=65;i看起来您可能已经在使用最简单的方法之一了 一种更详细但可能不那么优雅(尽管可以说更容易阅读)的方法可以是如下所示: for (int i = 65; i < 73; i++) { uniq.add((char) i); } f

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

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

for(inti=65;i看起来您可能已经在使用最简单的方法之一了

一种更详细但可能不那么优雅(尽管可以说更容易阅读)的方法可以是如下所示:

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

for (int i = 74; i <= 90; i++) {
            uniq.add((char) i);
}
for(int i=65;i<73;i++){
唯一添加((字符)i);
}

对于(inti=74;i,看起来您可能已经在使用最简单的方法之一了

一种更详细但可能不那么优雅(尽管可以说更容易阅读)的方法可以是如下所示:

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

for (int i = 74; i <= 90; i++) {
            uniq.add((char) i);
}
for(int i=65;i<73;i++){
唯一添加((字符)i);
}

对于(inti=74;i直接实现以下代码应该可以工作。 使用此方法,您无需知道字母的相应ACSII或Unicode表示形式

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

for(inti='A';i以下代码的直接实现应该可以工作。
使用此方法,您无需知道字母的相应ACSII或Unicode表示形式

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

for(inti='A';i您可以尝试以下方法:

for (int i = 65; i <=90; i++) {
    if (i == 73) {
        continue;
    }                    // An else is not needed because the continue would skip
    uniq.add((char) i);  // over all of the code after it.
}

对于(int i=65;i您可以尝试以下方法:

for (int i = 65; i <=90; i++) {
    if (i == 73) {
        continue;
    }                    // An else is not needed because the continue would skip
    uniq.add((char) i);  // over all of the code after it.
}
对于(int i=65;i在封面下,a只是一个介于0和65535之间的数字(无符号
short
),这意味着您可以对
char
s进行算术运算,甚至可以在循环中使用它们。这可以使许多文本旋转代码更易于阅读。请考虑:

for (char c = 'A'; c <= 'Z'; c++) {
  if (c != 'I') {
    uniq.add(c);
  }
}
但是,根据您的数据结构,这可能会有问题。如果
uniq
是一个
列表
,则
.remove()
操作必须在整个列表上循环,这是不必要的浪费。

在封面下,a只是一个介于0和65535之间的数字(未签名的
short
),这意味着您可以对
char
s进行算术运算,甚至可以在循环中使用它们。这可以使许多文本旋转代码更易于阅读。请考虑:

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

但是,根据您的数据结构,这可能会有问题。如果
uniq
是一个
列表
,则
.remove()
操作必须在整个列表上循环,这是不必要的浪费。

我更喜欢
If(I!=73)
而不是
If(!(I==73))
,但除此之外,我认为您已经有了最直接的方法。另一种可能是将它们全部添加,然后删除您不想要的一个,但我不确定这是否更清楚。我试图清理并澄清您的问题,如果我弄错了您的意思,请道歉。您可以单击“编辑”如果是这样的话,为什么不将它们全部添加,然后显式删除
I
?@C.B.这将需要O(n)时间。如果你知道哪个索引
I
最终会出现,你可以做得更好,但这可能比当前的解决方案更脆弱。如果你使用的是正确的数据结构,就不会这样。特别是因为
uniq
意味着某种
集合。但是我同意,如果使用正确的命名约定,可能需要一个cast让它更具可读性,除非有更多内容需要删除。我更喜欢
if(I!=73)
而不是
if(!(I==73))
,但除此之外,我认为您已经有了最直接的方法。另一种可能是将它们全部添加,然后删除您不想要的一个,但我不确定这是否更清楚。我试图清理并澄清您的问题,如果我弄错了您的意思,请道歉。您可以单击“编辑”如果是这样的话,为什么不将它们全部添加,然后显式删除
I
?@C.B.这将需要O(n)时间。如果你知道哪个索引
I
最终会出现,你可以做得更好,但这可能比当前的解决方案更脆弱。如果你使用的是正确的数据结构,就不会这样。特别是因为
uniq
意味着某种
集合。但是我同意,如果使用正确的命名约定,可能需要一个cast让它更具可读性,除非有更多的内容需要删除。这看起来像是@Rezwan答案的副本;他先开枪。@tucuxi这与@Rezwan的答案类似,但请注意,
c
是一个
char
直接,避免了施放的需要。我的答案还提供了更多的上下文,而不仅仅是“使用我的代码”。如果“先开枪”比“更多的上下文”更重要对你来说,就这样吧。我只是想帮你。我一眼就没注意到区别。这并不意味着冒犯。但是,在几个小时后提交之前引用类似的答案会是一种很好的形式。这看起来像是@Rezwan的答案的副本;他先开枪。@tucuxi这与@Rezwan的答案类似,但请注意
c
直接是一个
字符
,避免了施法的需要。我的回答也提供了比“使用我的代码”更多的上下文。如果“先开枪”比“更多上下文”更重要对你来说,就这样吧。我只是想帮你。我一眼就没注意到区别。这并不意味着冒犯。不过,在几个小时后提交之前引用类似的答案会是一种很好的形式。