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"循环体内可见。

