首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.4.4  while循环

Java提供while循环式,它根据您所指定的条件式来判断是否执行循环体。语法如下:

while(条件式) {
    语句一; 
    语句二; 
 } 

如果循环体只有一个语句,则while{ }可以省略不写;while像是没有起始语句与终止语句的for循环,主要用于重复性的动作,而停止的时机是未知的。例如一个使用者输入接口,使用者可能输入10次,也可能输入20次,这时循环停止的时机是未知的,可以使用while循环来完成。

一个计算输入成绩平均的程序如范例3.31所示。

Ü 范例3.31  ScoreAverage.java

import java.util.Scanner;

 

public class ScoreAverage {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int score = 0;

        int sum = 0;

        int count = -1;

 

        while(score != -1) {

            count++;

            sum += score;

            System.out.print("输入分数(-1结束)");

            score = scanner.nextInt();

        }

 

        System.out.println("平均:" + (double) sum/count);

    }

}

在这个程序中,使用者的输入次数是未知的,所以使用while循环来判断使用者的输入是否为-1,以作为循环执行的条件。一个执行的例子如下:

 

输入分数(-1结束)99

输入分数(-1结束)88

输入分数(-1结束)77

输入分数(-1结束)-1

平均:88.0

 

while可以用作无穷循环,很多地方都用到无穷循环。例如游戏设计中对使用者输入设备的轮询(Poll),或是动画程序的播放都会使用到无穷循环。一个无穷循环如下所示:

while(true) { 
    循环内容; 
    ... 
 }

无穷循环可以由自己循环中的某个条件式来结束。下面是一个循环内部终止的例子:

while(true) { 
    语句; 
    if(条件式) 
        break;  // 跳离循环 
     ...
} 

当条件式成立时,会执行break离开while循环,这个breakswitch中的作用是一样的,都是要离开当时执行的程序块时使用。

while循环有时称为“当型循环”,因为它在循环执行前就会进行条件判断,而另一个do while称为“直到型循环”,它会先执行循环体,然后再进行条件判断。do while的语法如下所示:

do { 
    语句一; 
    语句二; 
    ... 
 } while(条件式);

注意while后面是以分号;作为结束,这个经常被忽略。由于do while会先执行循环,所以它通常用于进行一些初始化或接口沟通的动作,如范例3.32所示。

Ü 范例3.32  OddDecider4.java

import java.util.Scanner;

 

public class OddDecider4 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int input = 0;

        int replay = 0;

 

        do {

            System.out.print("输入整数值:");

            input = scanner.nextInt();

            System.out.println("输入数为奇数?" +

                            ((input%2 == 1) ? 'Y': 'N'));

            System.out.print("继续(1:继续 0:结束)");

            replay = scanner.nextInt();

        } while(replay == 1);  

    }

}

 

执行结果:

 

输入整数值:77

输入数为奇数?Y

继续(1:继续 0:结束)0