ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: while 循环 

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

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

如果循环本体只有一个陈述句,则while的{ }可以省略不写;while有些像是没有起始陈述与终止陈述的for循环,它通常用于重复性的动作,而停止条件未知何时发生的情况,例如一个使用者输入介 面,使用者可能输入10次,也可能输入20次,这时循环停止的时机是未知的,您可以使用while循环来作这个事。

一个计算输入成绩平均的程序如下所示:

Average.java
import java.util.Scanner;
public class Average {
	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);
	}
}

执行结果:

输入分数(-1结束):98 
输入分数(-1结束):76
输入分数(-1结束):83 
输入分数(-1结束):67 
输入分数(-1结束):77 
输入分数(-1结束):-1 
平均:80.2

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

while可以用作无穷循环,无穷循环并不是不能用,事实上很多地方都用到的到无穷循环,例如游戏设计中对使用者输入装置的轮询(poll),或是动画程序的播放,一个无穷循环如下所示:

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

无穷循环可以由自己循环中的某个条件式来结束,也可以由外部程序的终止或函式呼叫的终止来结束,例如下面是一个循环内部终止的例子:

while(true) { 
陈述句; 

if(条件式) 
break;?// 跳离循环 

.... 
} 

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

while循环称之为「前测式循环」,因为它在循环执行前就会进行条件判断,而do while称之「后测式循环」,它会先执行循环本体,然后再进行条件判断,do while的语法如下所示:

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

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

Odd.java
import java.util.Scanner;

public class Odd { 
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);?
} 
} 

执行结果:

输入整数值:3
输入数为奇数?Y
继续(1:继续 0:结束)?1
输入整数值:4
输入数为奇数?N
继续(1:继续 0:结束)?0

如果您日后学会类别成员方法的使用,您还可以将这个循环写的更漂亮一些,而不用使用replay变量,例如若下面again()方法询问使用者是否继续,如果是会传回true,否则传回false:

do { 
System.out.print("输入整数值:"); 
input = scanner.nextInt();
System.out.println("输入数为奇数?" + 
((input%2 == 1) ? 'Y': 'N')); 
} while(again()); 

一个小小的改变,就可以使程序更为简洁,逻辑上也较为清楚。