3.3循环语句
循环语句就是在满足一定条件的情况下反复执行某一个操作的语句。Java中提供了3种常用的循环语句,分别是while循环语句、do…while循环语句和for循环语句,下面分别进行讲解。
3.3.1 while循环语句
while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句。语法如下:
while(条件表达式){
语句序列
}
当条件表达式的返回值为真时,则执行“{}”中的语句,当执行完“{}”中的语句后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,退出循环。
【例1】计算1~1000的相加结果
创建GetSum类,在主方法中通过while循环计算1~1000相加的和并输出。
public class GetSum{public static void main(String[] args){int x = 1; //从1开始int sum = 0; //相加的结果while(x <= 1000){ //循环1000次sum = sum + x; //sum与之前计算的和相加x++; //每次循环后x的值+1}System.out.println("sum = "+sum); //输出最终的相加结果}
}
运行结果如下:
sum = 500500
误区警示:
初学者经常犯的一个错误就是在while表达式的括号后加“;”。如:
while(x==5);System.out.println("x的值为5");
这时程序会认为要执行一条空语句,而进入无限循环,Java编译器又不会报错。这可能会浪费很多时间去调试,应注意这个问题。
3.3.2 do...while循环语句
do...while循环语句与while循环语句类似,它们之间的区别是while语句为先判所条件是否成立再执行循环体,而do...while循环语句则先执行一次循环后,再为判断条件是否成立。也就是说,do...while循环语句“{}”中的程序段至少要被执行一次。语法如下:
do{
语句序列
}while(条件表达式);
do...while语句与while语句的一个明显区别是,do...while语句在结尾处多了一个分号。
【例2】使用do...while语句进行用户登录验证
创建LoginService类,首先提示用户输入6位密码,然后使用Scanner扫描器类获取用户输入的密码,最后进入do...while循环进行判断,如果用户输入的密码不是“931567”,则让用户反复输入,直到输入正确密码为止。
import java.util.Scanner; //引入Scanner类
public class LoginService {public static void main(String[] args){Scanner sc = new Scanner(System.in); //创建扫描器,获取控制台输入的值int password; //保存用户输入的密码do{System.out.println("请输入6位数字密码:"); //输出提示password = sc.nextInt(); //将用户在控制台输入的密码记录下来}while(931567 != password); //如果用户输入的密码不是931567则继续执行循环System.out.println("登录成功"); //提示循环已结束sc.close(); //关闭扫描器}
}
运行结果如下:
请输入6位数字密码:
123456
请输入6位数字密码:
987654
请输入6位数字密码:
931567
登录成功 //输入正确密码才会显示“登录成功”
3.3.3 for循环语句
for循环是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。for循环有两种语句,一种是传统的for语句,一种是foreach语句,下面分别介绍这两种语句的使用方法。
1.for语句
传统的for语句中有3个表达式,其语法如下:
for(表达式1;表达式2;表达式3){
语句序列
}
☑表达式1:初始化表达式,负责完成变量的初始化。
☑表达式2:循环条件表达式,值为boolean型的表达式,指定循环条件。等同于while循环里的表达式。
☑表达式3:每次循环结束后执行的语句,通常用来改变循环条件。
在执行for循环时,首先执行表达式1,完成某一变量的初始化工作;下一步判断表达式2的值,若表达式2的值为true,则进入循环体;在执行完循环体后紧接着计算表达式3,这部分通常是增加或减少循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算表达式2开始,若表达式2返回true,则继续循环,否则跳出整个for语句。
【例3】使用for循环计算2~100所有偶数之和
创建Circulate类,编写程序,使用for循环语句计算2~100所有偶数的和并输出。
public class Circulate {public static void main(String[] args){int sum = 0; //偶数相加后的结果for (int i = 2;i <= 100;i += 2){sum = sum + i; //指定循环条件及循环体}System.out.println("2到100之间的所有偶数之和为:"+sum); //将相加后的结果输出}
}
运行结果如下:
2到100之间的所有偶数之和为:2550
2.foreach语句
foreach语句是for语句的特殊简化版本,不能完全取代for语句,但任何foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称为foreach语句。foreach语句在遍历数组等方面为程序员提供了很大的方便。语法如下:
for(元素类型 x : 遍历对象 obj){
引用了x的java语句;
}
foreach语句中的元素变量x,不必对其进行初始化。下面通过简单的例子来介绍foreach语句是如何遍历一维数组的。
【例4】使用foreach语句遍历整型数组
创建类Repetition,在主方法中定义一维数组,并用foreach语句遍历该数组。
public class Repetition{public static void main(String[] args){int arr[] = {5,13,96}; //一维整型数组System.out.println("一维数组中的元素分别为:");//x的类型与arr元素的类型相同。for循环依次取出arr中的值并赋给xfor(int x : arr){System.out.println(x); //输出遍历出的元素值}}
}
运行结果如下:
一维数组中的元素分别为:
5
13
96