p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解
顺序结构
顺序结构是JAVA中最简单且是基本的结构。除非特别说明,否则就按照顺序一步一步的执行
顺序结构是任何一种算法都离不开的一种基本算法结构。
分支结构
if语句
格式一(单条件判断)
if(关系表达式){
语句体;
}
具体如下
if(a > 2){
System.out.println("你过关!");
}
执行流程
- 首先计算关系表达式的值
- 如果值为true就执行语句体
- 如果值为false就不执行语句体
- 继续执行后面语句体
流程图如下
格式二(双条件判断)
if(关系表达式){
语句体1;
}
else{
语句体2:
}
执行流程
- 首先计算关系表达式的值
- 如果值为true就执行语句体1
- 如果值为false就执行语句体2
- 继续执行后面语句体
流程图如下
举例题
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//需求:键盘录入女婿酒量,如果大于2斤,老丈人给出回应,反之不回应
//if(关系表达式){
// 语句体;
//}
//键盘录入女婿的酒量
Scanner scanner = new Scanner(System.in);
System.out.println("提问:女婿酒量多少");
//然后接收酒量数据
int wine = scanner.nextInt();
//对酒量进行判断
if (wine > 2){
System.out.println("你过关!!");
}
else {
System.out.println("菜就多练");
}
scanner.close();
}
}
扩展: int a = 10
其实是两种语句。一是定义a的类型,二是给a赋值
判断要用”==“,“=”是赋值的意思
格式三(多条件判断)
if(关系表达式1){
语句体1;
}else if(关系表达式2) {
语句体2;
}
else{
语句体 n+1 :
}
执行流程
- 首先计算关系表达式1的值
- 如果值为true就执行语句体1;如果为false就计算关系表达式2的值
- 如果值为true就执行语句体;2如果为false就计算关系表达式2的值
- 如果·········
- 如果值全为false,就执行语句体n+ 1
- 继续执行后面语句体
流程图如下
举例题
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//1000的东西,输入会员级别,123级分别打987折,
// 非会员不打折,最后输出应付钱数
double money = 1000;
Scanner scanner = new Scanner(System.in);
System.out.println("输入会员等级(0~3)");
int level = scanner.nextInt();
if (level >= 0 && level <= 3) {
if (level == 1) {
money = money * 0.9;
System.out.println("你要付的钱为" + money);
} else if (level == 2) {
money = money * 0.8;
System.out.println("你要付的钱为" + money);
} else if (level == 3) {
money = money * 0.7;
System.out.println("你要付的钱为" + money);
} else {
System.out.println("你要付的钱为" + money);
}
} else {
System.out.println("看清问题谢谢");
}
scanner.close();
}
}
switch语句
格式
switch (表达式){
case 值1;
语句体1;
break;
case 值2;
语句体2;
break;
default :
语句体 n+1;
break;
}
执行流程
- 首先计算表达式的值。
- 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束
- 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句
流程图如下
举例题
import java.util.Scanner;
//输入日期获得学习计划
public class s {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("提问:今天周几?");
int day = scanner.nextInt();
switch (day){
case 1:
System.out.println("学语文!");
break;
case 2:#
System.out.println("学数学!");
break;
case 3:
System.out.println("学英语!");
break;
case 4:
System.out.println("学生物!");
break;
case 5:
System.out.println("学物理!");
break;
case 6:
System.out.println("学化学!");
break;
case 7:
System.out.println("学JAVA!");
break;
default:
System.out.println("请输入正确日期");
break;
}
scanner.close();
}
}
补充
- defalut的位置可以写在任意位置,只不过习惯将其写在最下方
defalut可省略,语法上没问题但最好不要省略 - case穿透
switch语句中不能省略break,否则上面的例题当你随便键入一个数字后就会输出
3
学英语!
学生物!
学物理!
学化学!
学JAVA!
请输入正确日期
这就叫case穿透
发生case穿透的原因:就是语句体中没有写break导致的
执行流程
首先还是会拿着小括号表达式的值跟下面每一个case进行匹配
如果匹配上了就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句
如果没有发现break,那么程序会执行下一个case的语句体(即case穿透),一直遇到break或大括号为止
使用场景
如果多个case的语句体重复了,那么我们考虑用case穿透去简化代码
- case语句简化
case还有另外一种写法(不能出现两种不同写法的case)
switch (day){
case 1:
System.out.println("学语文!");
break;
case 2:#
System.out.println("学数学!");
break;
case 3:
System.out.println("学英语!");
break;
case 4:
System.out.println("学生物!");
break;
case 5:
System.out.println("学物理!");
break;
case 6:
System.out.println("学化学!");
break;
case 7:
System.out.println("学JAVA!");
break;
default:
System.out.println("请输入正确日期");
break;
}
利用case的另外一种写法可以将上述switch语句简化为
switch (day){
case 1 ->{
System.out.println("学语文!");}
case 2 ->{
System.out.println("学数学!");}
case 3 -> {
System.out.println("学英语!");}
case 4 -> {
System.out.println("学生物!");}
case 5 -> {
System.out.println("学物理!");}
case 6 -> {
System.out.println("学化学!");}
case 7 -> {
System.out.println("学JAVA!");}
default ->{
System.out.println("请输入正确日期");}
}
二如果语句块只有一行代码,那么case的大括号也可以省略,即
switch (day){
case 1 ->System.out.println("学语文!");
case 2 ->System.out.println("学数学!");
case 3 ->System.out.println("学英语!");
case 4 ->System.out.println("学生物!");
case 5 ->System.out.println("学物理!");
case 6 ->System.out.println("学化学!");
case 7 ->System.out.println("学JAVA!");
default ->System.out.println("请输入正确日期");
}
-
switch和if第三种格式各自的使用场景
if的第三种格式一般用于对范围的判断
switch则用于把有限给数据一一列举出来,让我们任选其一的场景
case穿透适用情景 (当语句体重复了的时候)
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//输入日期,并得知是工作日还是休息日
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个整数表示星期几");
int day = scanner.nextInt();
switch (day){
case 1:
System.out.println("工作日");
break;
case 2:
System.out.println("工作日");
break;
case 3:
System.out.println("工作日");
break;
case 4:
System.out.println("工作日");
break;
case 5:
System.out.println("工作日");
break;
case 6:
System.out.println("休息日");
break;
case 7:
System.out.println("休息日");
break;
default:
System.out.println("请看清题目");
break;
}
}
}
使用case穿透便可简化代码
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//输入日期,并得知是工作日还是休息日
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个整数表示星期几");
int day = scanner.nextInt();
switch (day){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("请看清题目");
break;
}
}
}
还可以合并case以及利用case的另一种写法以及一行代码省略大括号来简化
import java.util.Scanner;
public class s {
public static void main(String[] args) {
//输入日期,并得知是工作日还是休息日
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个整数表示星期几");
int day = scanner.nextInt();
switch (day){
case 1,2,3,4,5 -> System.out.println("工作日");
case 6,7 -> System.out.println("休息日");
default -> System.out.println("请看清题目");
}
}
}