Java while 循环

Java while循环与for循环类似。 while循环使Java程序能够在某些条件成立的情况下重复执行一系列操作。

while循环存在两种变体。常用的while循环和不常用的while循环。我将在本文中介绍while循环。

while循环

首先我们来看看常用的while循环的大概样子。示例如下:

int counter = 0;

while(counter < 10) {

    System.out.println("counter: " + counter);

    counter++;
}

这个例子中只要counter变量小于10就会一直执行循环体。在while循环体内,counter是递增的。最终counter变量将不再小于10,while循环将停止执行。

下面是使用布尔值进行比较的例子:

boolean shouldContinue = true;

while(shouldContinue == true) {

    System.out.println("running");

    double random = Math.random() * 10D;

    if(random > 5) {
        shouldContinue = true;
    } else {
        shouldContinue = false;
    }

}

这个例子使用布尔变量shouldContinue来是否应该检查是否应执行while循环体中的代码。如果shouldContinue变量的值为true,则会再次执行while循环体。如果shouldContinue变量的值为false,那么while循环会停止,并在while循环之后的下一个语句处继续执行。

在while循环体内生成一个0到10之间的随机数。如果随机数大于5,则shouldContinue变量将被设置为true。如果随机数是小于等于5,shouldContinue变量将被设置为false。

和for循环一样,大括号在while循环体中是可选的。如果省略大括号,那么while循环体将只包含其后的第一个Java语句。示例如下:

while(iterator.hasNext())
  System.out.println("next: " + iterator.next()); // 在循环体内执行
  System.out.println("second line");              // 循环体完成后执行

在这个例子中,在while循环内只执行第一个System.out.println()语句。第二个System.out.println()语句会在while循环完成后才执行。

关于while循环常见的错误就是忘记循环体的花括号。因此,在while循环体首尾放置花括号内是一个好习惯。

do while循环

while循环的第二种变体就是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循环变体的主要区别在于在循环条件被测试前do while循环体至少执行一次。而while循环必须先检查循环条件,条件符合才会执行循环体。

Java while循环的两个变体在不同情况会派上用场。我主要使用第一个while循环变体,但有些情况仍然会使用第二个变体。

continue关键字

Java包含一个continue关键字,可以用在while(和for)循环的循环内部。 continue关键字放在while循环体内。当continue关键字条件得到满足时,Java虚拟机会跳转到循环的下一次迭代,而此次迭代不执行while后面循环体。如果下一次迭代也符合continue条件,则该迭代也将跳到下一次迭代,依此类推。

String[] strings = {
    "John", "Jack", "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语句检查字符串数组中的每个字符串是否以字母j开头。如果不是,则执行continue命令,while循环继续下一次迭代。

如果字符串数组中的当前字符串以字母j开头,则会执行if语句后面的下一个Java语句,并且变量wordsStartingWithJ将增加1。

continue命令也可以在do while循环中使用。示例如下:

String[] strings = {
    "John", "Jack", "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循环的这个版本要求strings数组至少有一个元素,否则在do while循环的第一次迭代期间尝试索引位置0处的元素时将会失败。

break关键字

break是用在while(和for)循环中循环主体的命令。当break满足条件时,即使循环条件仍然为真,Java虚拟机也会跳出while循环。一旦break条件满足,break后面的循环主体代码将不会执行,while循环也不会继续迭代。示例如下:

String[] strings = {
    "John", "Jack", "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语句检查是否找到首字母是j的单词数量大于等于3。如果是,则执行break命令,程序跳出while循环。

与continue命令一样,break命令也可以在do while循环中使用。示例如下:

String[] strings = {
    "John", "Jack", "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; )

请注意,上例中要求strings数组至少有一个元素。如果strings数组没有元素,则在do while循环的第一次迭代期间,JVM尝试访问数组的第一个元素(索引为0)时将失败。

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

下一篇:

results matching ""

    No results matching ""