从0开始学Java-8 流程控制
8.1 复合语句
Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。复合语句由开括号“{”开始,闭括号“}”结束。

8.2 条件语句
8.2.1 if 条件语句
if 之后可是作为条件的“布尔表达式”,if条件语句可分为简单的if条件语句、if...else语句和if...else if多分支语句。
1.简单的if语句
语法:
if(布尔表达式){
语句序列
}
1)布尔表达式:必要参数,表示最后返回的结果必须是一个布尔值。它可以是一个单纯的布尔变量或常量,也可以是使用关系或布尔运算符的表达式。
2)语句序列:可选参数,可以是一条或多条语句,当表达式的值为true时执行这些语句。若语句序列中仅有一条语句,则可以省略条件语句中的“{}”:
int a = 100;
if(a==100)
System.out.println("a的值是100");
if条件语句的执行过程:


8.2.2 if...else 语句
if(条件表达式){
语句序列 1
}else{
语句序列 2
}
if后面“()”内的表达式的值必须是boolean类型的。如果表达式的值为true,则执行紧跟if语句的复合语句;如果表达式的值为false,则执行else后面的复合语句。执行过程:


8.2.3 if...else if 语句
if...else if 多分支语句用于针对某一事件的多种情况进行处理。通常表现为“如果满足某种条件,就进行某种处理,否则如果满足另一种条件则执行另一种处理。”语句如下:
if(条件表达式){
语句序列 1
}else if(条件表达式2){
语句序列 2
}else if(条件表达式n){
语句序列 n
}

/*
使用 if...else if语句实现饭店座位分配
创建Restaurant类,声明整型变量count表示用餐人数,
根据人数安排客人到4人桌、8人桌或包厢用餐
*/
public class Restaurant {
public static void main(String[] args) {
System.out.println("欢迎光临,请问有多少人用餐?"); //输出问题提示
int count = 9; //用餐人数
System.out.println("回答:" + count + "人"); //输出回答
if(count <= 4) { //如果人数小于4人
System.out.println("客人请到大厅4人桌用餐"); //请到4人桌
}else if(count > 4 && count <= 8){ //如果人数在4~8人
System.out.println("客人请到大厅8人桌用餐"); //请到8人桌
}else if(count > 8 && count <= 16){ //如果人数在8~16人
System.out.println("客人请到楼上包厢用餐"); //请到包厢
}else { //当以上条件都不成立时
System.out.println("抱歉,我们店暂时没有这么大的包厢"); //输出信息
}
}
}
8.2.4 switch 多分支语句
语法如下:
switch(表达式){
case 常量值 1:
语句块1
[break;]
...
case 常量值 n:
语句块 n
[break;]
default:
语句块 n+1;
[break;]
}
switch 语句中表达式的值必须是整型、字符型、字符串类型或枚举类型,常量1~n的数据类型必须与表达式的值的类型相同。
switch 语句首先计算表达式的值,如果表达式的计算结果和某个case后面的常量值相同,则执行该case语句后的若干个语句直到遇到break语句为止。此时,如果该case语句中没有break语句,将继续执行后面case中的若干个语句,直到遇到break语句为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句为可选的。如果它不存在,且switch语句中表达式的值不与任何case的常量值相同,switch语句则不做任何处理。
同一个case语句,case的常量值必须互不相同。

使用switch语句为考试分数分级
创建Gread类,使用Scanner类在控制台输入分数,然后用switch多分支语句判断输入的分数属于哪类成绩。10分和9分属于优,8分属于良,7分和6分属于中,5分、4分、3分、2分、1分以及0分均属于差。
import java.util.Scanner; //导入Scanner类
public class Gread {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //创建扫描器,接受控制台输入内容
System.out.println("请输入成绩:"); //输出字符串
int gread = sc.nextInt(); //获取控制台输入的数字
switch(gread) { //使用switch判断数字
case 10: //如果等于10,则继续执行下一行代码
case 9: //如果等于9
System.out.println("成绩为优"); //输出“成绩为优”
break; //结束判断
case 8: //如果等于9
System.out.println("成绩为良"); //输出“成绩为良”
break; //结束判断
case 7: //如果等于7,则继续执行下一行代码
case 6: //如果等于6
System.out.println("成绩为中"); //输出“成绩为中”
break; //结束判断
case 5: //如果等于5,则继续执行下一行代码
case 4: //如果等于4,则继续执行下一行代码
case 3: //如果等于3,则继续执行下一行代码
case 2: //如果等于2,则继续执行下一行代码
case 1: //如果等于1,则继续执行下一行代码
case 0: //如果等于0
System.out.println("成绩为差"); //输出“成绩为差”
break; //结束判断
default: //如果不符合任意一个结果
System.out.println("成绩无效"); //输出“成绩无效”
}
sc.close(); //关闭扫描器
}
}
8.3 循环语句
8.3.1 while 循环语句
while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句,语法如下:
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); //输出最终的相加结果
}
}
8.3.2 do...while 循环语句
do...while 循环语句先执行循环一次,在判断条件是否成立。
do{
语句序列
}while(条件表达式);

使用do...while语句进行用户登录验证
创建LoginService类,首先提示用户输入6位密码,然后使用Scanner扫描器类获取用户输入的密码,最后进入do...while循环进行判断,如果用户输入的密码不正确,则让用户反复输入,直到输入正确密码为止。
import java.util.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(password != 123456); //如果用户输入的密码不正确,则继续执行循环
System.out.println("输入成功"); //提示循环结束
sc.close(); //关闭扫描器
}
}
8.3.3 for 循环语句
8.3.3.1 for 语句
传统的for语句有3个表达式:
for(表达式1;表达式2;表达式3){
语句序列
}
表达式1:初始化表达式,负责完成变量的初始化
表达式2:循环条件表达式,值为boolean型的表达式,指定循环条件
表达式3:每次循环结束后执行的语句,通常用来改变循环条件

在执行for循环时,首先执行表达式1,完成某一变量的初始化工作;下一步判断表达式2的值,若表达式2的值为true,则进入循环体;在执行完循环体后紧接着计算表达式3,这部分通常是增加或减少循环控制变量的一个表达式。这样一轮循环就结束了。第二轮循环从计算表达式2开始,若表达式2返回true,则继续循环,否则跳出整个fou语句。
使用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); //将相加后的结果输出
}
}
8.3.3.2 foreach 语句
foreach 语句是for语句的特殊简化版本
for(元素类型 x : 遍历对象 obj){
引用了x的java语句;
}
使用foreach语句遍历整型数组
public class Repetition {
public static void main(String[] args) {
int arr[] = {5, 13, 96};
System.out.println("一维数组中的元素分别为:");
//x的类型与arr元素的类型相同。for循环依次取出arr中的值并赋给x
for(int x : arr) {
System.out.println(x);
}
}
}

浙公网安备 33010602011771号