5.1 概述
计算机源于生活,程序模拟现实生活,从而服务生活。如下生活例子:
(1)起床,刷牙,洗脸,吃早餐,上课,回家,睡觉 ----->(顺序)
(2)如果时间不太够,打个滴滴快车,如果时间够,坐个地铁 ---->(选择)
(3)撸完这个接口,又撸下一个接口 ----> (循环)
因此程序的执行流程有:
- 顺序性
- 选择性 (if else switch)
- 循环性 (for do while)
顺序性就是程序自上往下执行,接下来分别讲解条件分支语句与循环语句。
5.2 if 结构语句 (条件分支语句)
5.2.1 if 语句
语法结构
if(关系表达式) {
基本语句体
}
执行顺序:首先判断关系表达式的结果是 true 或 false,若为 true,则执行基本语句体;反之不执行。
int i = 10 / 3; int j = 20 / 4; if(i > j) { System.out.println("i 较大") }
5.2.2 if else 语句
语法结构
if(关系表达式) {
语句体1;
} else {
语句体2;
}
执行顺序:首先判断关系表达式的结果是 true 或 false,若为 true,则执行语句体1;反之则执行语句体2。如:我们常见的登录,用户输入密码,判断密码正确与否的操作如下:
import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.println("请输入密码:"); Scanner sca = new Scanner(System.in); String password = sca.next(); if("123456".equals(password)) { System.out.println("登录成功"); } else { System.out.println("用户名或密码错误!"); } } }
Scanner 这个是 java.util 包下的一个类,因此需要 import 关键字进行引入,通过 Scanner 类来获取用户的输入。new Scanner(System.in) 是创建一个这个类的对象(之后讲解,先照着写);next() 这个方法获取输入的字符串;equals() 方法是 String 类的方法,作用是比较两个字符串的值是否相等(为啥要特意标为蓝色,之后讲解)。
5.2.3 多重 if
语法结构
if(关系表达式1) {
语句体1;
} else if(关系表达式2){
语句体2;
}
...
else {
语句体 n
}
执行顺序:首先判断关系表达式1的结果是 true 或 false,若为 true,则执行语句体1;反之继续判断关系表达式2,若为 true,则执行语句体2,依此类推。如:输入学生成绩,判断学生成绩等级,90 分以上(包含 90)为 A,80 ~ 90 为 B,70 ~ 80 为 C,60 ~ 70 为 D,其余为 E。
System.out.println("please input a score:"); Scanner scanner = new Scanner(System.in); int score= scanner.nextInt(); if(score >= 90) { System.out.println("该学生分数等级为:A"); } else if(score >= 80) { System.out.println("该学生分数等级为:B"); } else if(score >= 70) { System.out.println("该学生分数等级为:C"); } else if(score >= 60) { System.out.println("该学生分数等级为:D"); } else { System.out.println("该学生分数等级为:E"); }
5.2.3 嵌套 if
语句结构:
if(条件表达式 1) {
if(条件表达式 2) {
语句体1;
} else {
语句体2;
}
}
执行顺序类似上述例子。
5.3 Switch 语句 (条件分支语句)
语法结构:
switch(表达式) {
case 值 1 :
语句体1;
break;
case 值 2 :
语句体 2;
break;
...
default :
语句体 n;
break;
}
- case 后面跟的是要和表达式进行比较的值。
- break 表示中断,结束的意思,用来结束 switch 语句。
- default 语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的 else 相似。
例子:用户输入1 ~ 7 的数字,每个数字对应周几学习什么课程。System.out.println("please input a dayNum:"); Scanner sca = new Scanner(System.in); int dayNum = sca.nextInt(); switch(dayNum) { case 1 : System.out.println("周一学 Java 基础");break; case 2 : System.out.println("周二学 SQL");break; case 3 : System.out.println("周三学 JavaScript");break; case 4 : System.out.println("周四学恋爱学");break; case 5 : System.out.println("周五学煮饭");break; case 6 : System.out.println("周六学刺激战场");break; default : System.out.println("周日学王者荣耀");break; }
注:
- case 后面的值不可相同;
- default 可以忽略写;
- break 也可以忽略写,不过会继续判断下去,如上述例子,如果 case 1 后没有 break,满足条件后依然会继续判断,直到遇到 break 或执行到最后才结束。
- 在 jdk1.7 之前,switch 后面的表达式只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型。switch 后面的括号里面只能放int类型的值,但由于 byte,short,char 类型,它们会 自动 转换为 int 类型(精精度小的向大的转化),所以它们也支持。对于精度比 int 大的类型,比如 long、float,doulble,不会自动转换为 int,如果想使用,就必须强转为 int,如 (int)float;jdk1.7 后,整形,枚举类型,boolean,字符串都可以。
5.4 for (循环语句)
语法结构:
for(初始化语句; 条件判断语句; 条件控制语句) {
循环体语句;
}
执行流程:
- (1)执行初始化语句;
- (2)执行条件判断语句,如果返回 false,则结束循环;反之第(3)步。
- (3)执行循环体语句;
- (4)执行条件控制语句;
- (5)回到(2)继续。图解如下:
例子:求出 1~10 之间数据之和。int sum = 0; for(int i = 1; i <= 10; i++) { sum += i; } System.out.println("1~10 之间数据之和为:" + sum);
可自行测试嵌套 if else 语句。
5.5 While(循环语句)
语法结构:
while(判断条件语句) {
循环体语句;
控制条件语句;
}
执行流程:
- (1)执行条件判断语句,若返回 false,则结束,反之执行第(2)步;
- (2)执行循环体;
- (3)执行条件控制语句;
- (4)回到(1)继续。图解如下:
例子:求出 1~10 之间数据之和。int i = 1; int sum = 0; while (i <= 10) { sum += i; i++; } System.out.println("1~10 之间数据之和为:" + sum);
可自行尝试“输入登录密码,超过 3 次则提示账户锁定,输入成功则直接跳出”
5.6 do While(循环语句)
语法结构:
do {
循环体语句;
条件控制语句;
} while(判断条件语句);
执行流程:
- (1)先执行循环体语句;
- (2)执行条件控制语句;
- (3)执行条件判断语句,若返回 false,则结束循环,反之执行第(1)步,图解如下:
例子:求出 1~10 之间数据之和。int i = 1; int sum = 0; do { sum += i; i++; } while(i <= 10); System.out.println("1~10 之间数据之和为:" + sum);
5.7 嵌套循环
打印如下标志:
*****
****
***
**
*
for(int i = 0; i < 5; i++) {
for(int j = 5; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
打印如下标志:
*****
****
***
**
*
for(int i = 0; i < 5; i++) {
for(int j = 0; j < i; j++) {
System.out.print(" ");
}
for(int j = 5; j > i; j--) {
System.out.print("*");
}
System.out.println();
}
打印九九乘法表:
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(j + " * " + i + " = " + i * j + "\t");
}
System.out.println();
}
5.8 break,continue,return(循环语句)
5.8.1 break
break 在 switch 中已经讲解,在循环语句中是跳出当前循环。如:打印 1~10 之间的数字,如果中间遇到 3 的倍数则退出循环
for(int i = 1; i < 10; i++){
if(i % 3 == 0) {
break;
}
System.out.print(i + “\t”);
}
输出结果是:1 2
5.8.2 continue
在循环语句中用于结束本次循环。如:打印 1~10 之间的数字,如果中间遇到 3 的倍数则跳过不打印,继续打印后面的数据。
for(int i = 1; i < 10; i++){
if(i % 3 == 0) {
continue;
}
System.out.print(i + "\t");
}
输出结果是:1 2 4 5 7 8
5.8.3 return
return 语句用于结束当前正在执行的方法,并将控制权返回给调用此方法的方法。其有两种形式:
- 没有返回值的方法
不带返回值的 return 语句只能用于返回类型为 void 的方法。在返回类型为 void 的方法中,return 返回语句不是必需的,隐式的 return 发生在方法最后一个语句完成时。main 方法就是这样一个例子。一般情况下,返回类型是 void 的方法使用 return 语句是为了引起方法的强制结束,这种 return 的用法类似于循环结构中的 break 语句的作用。
- 有返回值的方法
任何返回类型不是 void 的方法必须返回一个值,而且这个返回值的类型必须和方法的返回类型相同,或者能隐式转化为方法的返回类型。
public static void main(String[] args) {
System.out.println("请分别输入要连个要判断大小的数字(空格隔开):");
Scanner scanner = new Scanner(System.in);
int num1 = scanner.nextInt();
int num2 = scanner.nextInt();
System.out.println("最大值为:" + getMax(num1, num2));
}
/**
* 判断是否为偶数,是返回true
* @param num1
* @param num2
* @return
*/
public static int getMax(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
可到牛客网做练习。
至此,Java 条件分支语句与循环语句大体了解了,接下来请看《 6 Java 方法》