Java While循环
Java的while循环类似于for循环。 while循环使Java程序可以在某些条件为真时重复执行一组操作。
Javawhile
循环存在两个变体。常用的" while"循环和较少使用的" while while"版本。在本文中,我将介绍两个" while"循环版本。
Java while循环
让我们首先看一下Javawhile
循环中最常用的变体。这是一个简单的Java while循环示例:
int counter = 0; while(counter < 10) { System.out.println("counter: " + counter); counter++; }
该示例显示了一个while
循环,只要counter
变量小于10,它就会执行循环主体。在while
循环主体中,counter
会递增。最终," counter"变量将不再小于10,并且" while"循环将停止执行。
这里是另一个while
例子使用boolean
做出比较:
boolean shouldContinue = true; while(shouldContinue == true) { System.out.println("running"); double random = Math.random() * 10D; if(random > 5) { shouldContinue = true; } else { shouldContinue = false; } }
这个Java while例子测试了boolean变量shouldContinue来检查while循环是否应该执行。如果shouldContinue
变量的值为true
,则while
循环体将执行一次。如果shouldContinue
变量的值为false
,则while
循环停止,并在while循环之后的下一条语句处继续执行。
在while循环体内,会生成一个介于0到10之间的随机数。如果随机数大于5,则将" shouldContinue"变量设置为" true"。如果随机数小于或者等于5,则" shouldContinue"变量应设置为" false"。
像for循环一样,大括号在while循环主体周围是可选的。如果省略花括号,则while
循环主体将仅由以下第一个Java语句组成。这是一个Java" while"示例,说明了这一点:
while(iterator.hasNext()) System.out.println("next: " + iterator.next()); // executed in loop System.out.println("second line"); // executed after loop
在此示例中,仅在while循环内执行了第一个System.out.println()语句。直到" while"循环完成后,才执行第二个" System.out.println()"语句。
遗忘while
循环体周围的花括号是一个常见的错误。因此,仅将它们放在while循环主体周围是一个好习惯。
Java while循环
Javawhile
循环的第二个变体是do while
构造。这是一个Java" do while"示例:
InputStream inputStream = new FileInputStream("data/text.xml"); int data; do { data = inputStream.read(); } while(data != -1);
注意," while"循环条件现在移至" do while"循环主体之后。 " do while"循环主体始终至少执行一次,然后在" while"循环条件为" true"时重复执行。
两种" while"循环变化之间的主要区别在于," while"循环总是在测试" while"循环条件之前至少执行一次。在本文开头解释的正常的while循环变化不是这种情况。
Javawhile
循环的两个变体在不同情况下派上用场。我主要使用了第一个" while"循环变体,但是在某些情况下,我使用了第二个变体。
continue命令
Java包含一个" continue"命令,该命令可以在Java" while"(和" for")循环中使用。在continue
命令被放置在while
循环体内部。当满足" continue"命令时,Java虚拟机将跳至循环的下一个迭代,而无需执行更多的" while"循环主体。 while循环主体的下一次迭代将与其他循环一样进行。如果该迭代也满足" continue"命令,则该迭代也将跳至下一个迭代,依此类推。
这是一个while
循环内的简单continue
示例:
String[] strings = { "John", "Hyman", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; int i=0; while( i < strings.length ) { if(! strings[i].toLowerCase().startsWith("j")) { i++; continue; } wordsStartingWithJ++; i++; }
注意while
循环中的if
语句。这个if语句检查string数组中的每个String是否都不以字母j开头。如果不是,则执行"继续"命令,而"循环"继续进行到下一个迭代。
如果string数组中的当前String确实以字母j开头,则执行if语句之后的下一个Java语句,并将变量wordsStartingWithJ递增1.
continue
命令也可以在do while
循环内使用。这是上一个示例的" do while"版本:
String[] strings = { "John", "Hyman", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; int i=0; do { if(! strings[i].toLowerCase().startsWith("j")) { i++; continue; } wordsStartingWithJ++; i++; } while( i < strings.length );
注意,此版本的while循环要求string数组至少包含一个元素,否则在do while循环的第一次迭代期间尝试索引到位置0的数组时将失败。
break命令
" break"命令是在Java" while"(和" for")循环内运行的命令。当满足break
命令时,即使循环条件仍然为真,Java虚拟机也会退出while
循环。一旦满足" break"命令,就不会再执行" while"循环的迭代。这是while循环内的break命令示例:
String[] strings = { "John", "Hyman", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; int i=0; while(i < strings.length; ) { if(strings[i].toLowerCase().startsWith("j")) { wordsStartingWithJ++; } if(wordsStartingWithJ >= 3) { break; } i++; }
注意while循环内的第二条if语句。该if语句检查是否找到3个或者多个以字母j开头的单词。如果是,则执行break命令,程序退出while循环。
像continue
命令一样,break
命令也可以在do while
循环中使用。这是之前的示例,而是使用do while
循环:
String[] strings = { "John", "Hyman", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; int i=0; do { if(strings[i].toLowerCase().startsWith("j")) { wordsStartingWithJ++; } if(wordsStartingWithJ >= 3) { break; } i++; } while( i < strings.length; )
注意,while循环的这种变化要求string数组始终至少包含一个元素。如果不是这样,它将在尝试访问数组的第一个元素(索引为0)时在do while循环的第一次迭代期间失败。
while循环中的可变可见性
在Java" while"循环内声明的变量仅在" while"循环体内可见。看这个while
循环示例:
int count = 0; while(count < 10) { String name = employees[i].getName(); count++; }
在while
循环体完成之后,仍然可以看到count
变量,因为count
变量是在while
循环体之外声明的。但是name
变量是不可见的,因为它是在while
循环体内声明的。因此," name"变量仅在" while"循环体内可见。