【问题标题】:Can I split this two-variable for loop into two nested loops?我可以将这个双变量 for 循环分成两个嵌套循环吗?
【发布时间】:2020-11-26 07:52:51
【问题描述】:

我想知道给定的for 循环,这对我来说很奇怪:

for (int i = 0, j = s.length - 1; i < j; i++, j--)

到目前为止,我使用的是带有一个变量的 for 循环。但是在这个例子中,一个循环中有两个变量。

我可以将for 循环分成两个嵌套循环吗?

for (int j = 0; j < s.length - 1; j--) {
    for (int i = 0; i < j; i++) {
    }
}

【问题讨论】:

  • 第一个循环是一个完全有效的for 循环。根本没有必要改变它。我敢打赌,当你刚开始的时候,所有的 Java 代码看起来都很奇怪,对吧?您是否也尝试更改 Java 代码,只是因为它看起来很奇怪?不,您学习了一些 Java,并且它不再看起来很奇怪。同样在这里。不要更改代码,因为它看起来很奇怪,了解更多 Java 并且它对您来说看起来很正常,并且代码将继续像 有意 编写的那样运行功能。

标签: java for-loop nested-loops


【解决方案1】:

这是错误的转换,正确的是:

int j = s.length - 1;
for (int i = 0; i < j; i++) {
    // inside logic
    j--;
}

【讨论】:

  • 请注意,如果循环中有任何 continue 语句,它会变得更加棘手,因为这样会跳过 j--。我建议 OP 熟悉原始循环的语法,因为这是编写它的最佳方式。
【解决方案2】:

没有。
原来的行为是这样的:

sssssss
i     j

sssssss
 i   j

sssssss
  i j

sssssss
   i
   j

它有例如 (s.length)/2 次迭代。用 i 迭代一半,用 j 迭代另一半。

建议的替代方案是 2D 并且具有例如 (s.length*s.length)/2 次迭代(假设 j++ 而不是损坏的 j--)。它覆盖了一个三角形。

sssssss
j
ij
iij
iiij
iiiij
iiiiij
iiiiiij

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多