在程序设计中,有时需要反复执行一段相同的代码,这时就需要使用循环结构来实现,Java语言提供了while循环、do-while循环、for循环。
一般情况下,一个循环结构包含四部分内容:
初始化部分,设置循环开始时变量初值。
循环条件,一般是一个布尔表达式,当表达式为true时执行循环体,为false时退出循环。
迭代部分,改变变量的状态。
循环体部分,需要重复执行的代码。
while循环语句和选择结构语句类似,都是根据判断条件决定是否执行大括号内的执行语句。区别在于,while循环语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到循环条件不成立,while循环结束。
(1)while循环语句语法格式
[初始化部分]
while(循环条件){
执行语句
...
}
在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕,程序继续判断循环条件,如果条件仍为true则继续执行循环体,直到循环条件为false时,整个循环过程才会结束。
while循环的执行流程如下图所示。
(2)while循环案例
随机产生一个100~200之间的整数,用户从键盘上输入所猜的数,程序显示是否猜中的消息,如果没有猜中要求用户继续猜,直到猜中为止。
public static void main(String[] args) {
Random random = new Random();
int magic = random.nextInt(100,201);
Scanner input = new Scanner(System.in);
System.out.print("请输入你要猜的数:");
int guess = input.nextInt();
while(guess != magic){
if(guess > magic){
System.out.print("错误,输入太大请重猜:");
}else {
System.out.print("错误,输入太小请重猜:");
}
guess = input.nextInt();
}
System.out.println("回答正确,该数是:" + magic);
}
(1)do-while循环语句语法格式
[初始化部分]
do {
执行语句
...
} while(循环条件);
在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件决定是否继续执行。
(2)do-while循环案例
要求用户从键盘输入若干个int型数,输入0则结束,程序计算并输出这些数的总和。
public static void main(String[] args) {
int sum = 0;
int num;
Scanner input = new Scanner(System.in);
do{
System.out.print("请输入一个数,输入0结束:");
num = input.nextInt();
sum += num;
}while(num != 0);
System.out.println("总和为:" + sum);
}
(1)for循环格式
for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下。
for(初始化表达式; 循环条件; 操作表达式){
执行语句
...
}
在上面的语法格式中,for关键字后面( )中包括了3部分内容,分别是初始化表达式、循环条件和操作表达式,它们之间用分号(;)分隔,{}中的执行语句为循环体。
(2)for循环注意事项
在初始化部分,可以为空,也可以声明多个变量,多个变量中间用“,”隔开。
for(int i = 0;;)
for(int i=0 , j=0 ; i <= 10 ; i++)
for( ; i < j ; i++)
在迭代部分,可以为空,也可以有多个表达式,多个表达式中间用“,”隔开。
for(int i = 0 ; i < j ; )
for(int i = 0 ; i < 10 ; i++)
for(int i = 0; i < j ; i++ , j++)
循环体部分也可以为空。
for( ; ; ) //无限循环,循环体中应包含结束循环代码
(3)for循环案例
编写程序,打印所有的水仙花数。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如153是一个“水仙花数”,因为153=13+53+33。
public static void main(String[] args) {
for(int i = 100;i < 1000;i++){
int bai = i / 100;
int shi = (i / 10) % 10;
int ge = i % 10;
int num = (int) (Math.pow(bai,3) + Math.pow(shi,3) + Math.pow(ge,3));
if(num == i){
System.out.println("水仙花数有:" + num);
}
}
}
(1)增强的for循环格式
增强的for循环,用来迭代数组或对象集合的每个元素,只能按顺序访问数组中元素,增强的for循环语句的语法格式如下。
for(type identifier : expression){
//循环体
}
在上面的语法格式中,实现对数组或集合中的每个元素,执行一次循环体中的语句。其中,expression为数组或集合对象,identifier为数组或集合对象,type为数组或集合中的元素类型。
(2)增强的for循环案例
使用增强for循环输出数组元素值。
public static void main(String[] args) {
int[] nums = {1,2,3,4,5};
for(int num : nums){
System.out.println(num);
}
}
循环嵌套是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,其中最常见的是在for循环中嵌套for循环。
(1)循环的嵌套案例
打印九九乘法表,要求使用嵌套的for循环。
public static void main(String[] args) {
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print( j + " * " + i + " = " + j * i + "\t");
}
System.out.print("\n");
}
}
跳转语句用语实现循环执行过程中程序流程的跳转,Java中的跳转语句有break语句和contine语句。
(1)break语句
break语句是用来跳出while、do-while、for或switch结构的执行。
break语句案例,编程计算1+2+3+…+n之和,和超过100结束,输出最终的和。
public static void main(String[] args) {
int sum = 0;
for(int i = 1; ;i++){
sum += i;
if(sum > 100){ //超过100终止
break;
}
}
System.out.println("和为:" + sum);
}
(2)continue语句
continue语句与break语句类似,但它只终止执行当前的迭代,导致控制权从下一次迭代开始。
continue语句案例,编程计算1到10之间的数的和,能被3整除的数除外。
public static void main(String[] args) {
int sum = 0;
for(int i = 1;i <= 10;i++){
if(i % 3 == 0){
continue;
}
sum += i;
}
System.out.println("和为:" + sum);
}
从键盘输入5个数,找出其中最大值和最小值。
public static void main(String[] args) {
int max = 0;
int min = 0;
int num;
Scanner input = new Scanner(System.in);
for(int i = 0;i < 4;i++){
System.out.print("请输入第" + (i+1) + "个数:");
num = input.nextInt();
if(i == 0){
max = num;
min = num;
}else{
if(num > max){
max = num;
}
if(num < min){
min = num;
}
}
}
System.out.println("最大值为:" + max);
System.out.println("最小值为:" + min);
}