java:while循环-在进入花括号之间的语句之前使用分号语句?

Posted

技术标签:

【中文标题】java:while循环-在进入花括号之间的语句之前使用分号语句?【英文标题】:java: while loop - statement with a semicolon before going into statements between curly braces? 【发布时间】:2012-09-30 02:55:22 【问题描述】:

我在***上查看了另一个页面,并遇到了循环排序的工作实现,但我不明白在while循环中的花括号之前如何存在带分号的语句。我认为while循环应该完全终止并且一旦找到带有分号的语句就不会采取进一步的行动,那么花括号内的代码是如何被执行的呢?乍一看,我会将此解释为“var”随着 while 循环的每次迭代而递增 - 但我知道情况并非如此,因为将其从该位置移除并将“var++”放入花括号内会导致无限环形。

究竟在什么条件下“var”递增?可以是解释,也可以是解释类似语法的链接:

while (checkSomeBool) var++;

   //other stuff happening in here

将不胜感激。谢谢你。下面是取自CycleSort的代码

public static final <T extends Comparable<T>> int cycleSort(final T[] array) 
int writes = 0;

// Loop through the array to find cycles to rotate.
for (int cycleStart = 0; cycleStart < array.length - 1; cycleStart++) 
  T item = array[cycleStart];

  // Find where to put the item.
  int pos = cycleStart;
  for (int i = cycleStart + 1; i < array.length; i++)
    if (array[i].compareTo(item) < 0) pos++;

  // If the item is already there, this is not a cycle.
  if (pos == cycleStart) continue;

  // Otherwise, put the item there or right after any duplicates.
  <while (item.equals(array[pos])) pos++;
  
    final T temp = array[pos];
    array[pos] = item;
    item = temp;
  
  writes++;

  // Rotate the rest of the cycle.
  while (pos != cycleStart) 
    // Find where to put the item.
    pos = cycleStart;
    for (int i = cycleStart + 1; i < array.length; i++)
      if (array[i].compareTo(item) < 0) pos++;

    // Put the item there or right after any duplicates.
    while (item.equals(array[pos])) pos++;
    
      final T temp = array[pos];
      array[pos] = item;
      item = temp;
    
    writes++;
  
 
return writes;

【问题讨论】:

这绝对是乱码(尽管远非我见过的最乱码)。 这样阅读可能会有所帮助:while (checkSomeBool) var++; // other stuff 我同意 Hot Licks。我认为作者试图误导。 谢谢大家。我没有做太多编码,所以这是我第一次在一行中看到整个“while”。 【参考方案1】:

while 循环以var++ 结束

while (checkSomeBool) var++; // while ends here

之后的代码根本不是while 循环的一部分。


   //other stuff happening in here - not part of the while loop

【讨论】:

+1。所以checkSomeBool 最好包含var(就像在 OP 代码中那样),否则循环永远不会或无限地执行。 是的,可能是这样。除非有另一个线程修改条件中的布尔值,仍然没有等待调用,这可能会导致一点 cpu-lock.. 我对 OP 中括号内的条件过于模糊。是的,那个布尔条件确实应该在某个地方有“var”。我正在使用的实际代码是:while (item.equals(array[pos])) pos++;【参考方案2】:

类 C 语言允许您将任意代码括在大括号中以创建块作用域,可以使用或不使用其他语法结构。 大括号中的代码在循环之后作为普通代码执行。

如果你完全取出while 行,它仍然会运行。

【讨论】:

我没有意识到花括号也可以达到这个目的。谢谢。

以上是关于java:while循环-在进入花括号之间的语句之前使用分号语句?的主要内容,如果未能解决你的问题,请参考以下文章

循环结构

关于if 要不要加括号

java循环语句while与do-while

PHP - If/else, for, foreach, while - 没有花括号?

循环语句while与for的穷举迭代

循环语句之while循环