前言
流程控制语句分为3种:
1)顺序控制
2)分支控制
让程序有选择的的执行,分支控制有三种:
单分支 if
双分支 if-else
多分支 if-else if-....-else
3)循环控制
一.if
1.格式一 单条件判断
public class HelloWorld { public static void main(String[] args) { /* if(关系表达式){ 语句体; } */ int number = 19; if(number >= 10){ System.out.println("The number is greater than 10"); } // 注意:if语句的语句体只有一条,那么大括号可以省略不写 if(number >= 10) System.out.println("The number is greater than 10"); //布尔类型,可以用==,也可以不用 boolean isAdult = true; if(isAdult){ System.out.println("The person is an adult"); } if(isAdult == true){ System.out.println("The person is an adult"); } } }2.格式二 双条件判断
public class HelloWorld { public static void main(String[] args) { /* if(关系表达式){ 语句体1; }else{ 语句体2; } */ //键盘录入一个整数表示身上的钱,大于等于100则网红餐厅,否则去小餐馆 java.util.Scanner sc = new java.util.Scanner(System.in); System.out.println("请输入身上的钱:"); int money = sc.nextInt(); //接收数据 if(money >= 100){ System.out.println("去网红餐厅"); } else{ System.out.println("去小餐馆"); //else可以不写,但是建议写上,增强代码可读性 } } }3.格式三 多条件判断
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { /* if(关系表达式1){ 语句体1; }else if(关系表达式2){ 语句体2; } ... else{ 语句体n+1; } */ //键盘录入小红的成绩,95-100奖励自行车,80-94奖励游乐场,70-79奖励50块钱,60-6910块钱,60以下没有奖励 Scanner sc = new Scanner(System.in); System.out.println("小红的成绩是: "); int score = sc.nextInt(); if (score >= 95 && score <= 100) { System.out.println("奖励自行车"); } //else if 可以有多个 else if (score >= 80 && score <= 94) { System.out.println("奖励游乐场"); } else if (score >= 70 && score <= 79) { System.out.println("奖励50块钱"); } else if (score >= 60 && score <= 69) { System.out.println("奖励10块钱"); } else if (score<60){ System.out.println("没有奖励"); } else { //else 可以没有,也可以有一个 System.out.println("输入的成绩不合理"); } } }4.格式四 嵌套分支
在一个分支结构里面有完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支(超过三层 就可读性不好)
例题:参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。输入成绩和性别,进行判断和输出信息。
public class NestedIf { //编写一个main 方法 public static void main(String[] args) { /* 参加歌手比赛,如果初赛成绩大于 8.0 进入决赛, 否则提示淘汰。并且根据性别提示进入男子组或女子组。 输入成绩和性别,进行判断和输出信息。 [NestedIf.java] 提示: double score; char gender; 接收字符: char gender = scanner.next().charAt(0) */ //思路分析 //1. 创建 Scanner 对象,接收用户输入 //2. 接收 成绩保存到 double score //3. 使用 if-else 判断 如果初赛成绩大于 8.0 进入决赛,否则提示淘汰 //4. 如果进入到 决赛, 再接收 char gender, 使用 if-else 输出信息 //代码实现 => 思路 --> java 代码 Scanner myScanner = new Scanner(System.in); System.out.println("请输入该歌手的成绩"); double score = myScanner.nextDouble(); if( score > 8.0 ) { System.out.println("请输入性别"); char gender = myScanner.next().charAt(0); if( gender == '男' ) { System.out.println("进入男子组"); } else if(gender == '女') { System.out.println("进入女子组"); } else { System.out.println("你的性别有误,不能参加决赛~"); } } else { System.out.println("sorry ,你被淘汰了~"); } } }二.switch
1.格式
Switch流程图
表达式可以是byte short int char JDK7之后可以是String
case给出的常量不能重复,必须是字面量
注:在编程语言中,字面量(literal)是指源代码中直接表示固定值的符号或记号。这些值通常是不可变的,并且在程序中以直观的方式呈现,使得开发者能够立即识别其内容1。
例如,数字 3、字符串 "ABC" 或布尔值 true 都是常见的字面量形式。它们与变量形成对比,因为变量的值是未知的或可能改变的,而字面量则是明确且固定的。
import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ /* switch(表达式){ case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; case 常量表达式3: 语句3; break; ... default: 语句n; break; */ // 用switch写出以下内容的代码:键盘输入我想吃的面,店家有的面是兰州拉面、重庆小面、陕西油泼面、北京炸酱面,其他面都不卖 Scanner sc = new Scanner(System.in); System.out.println("请输入想吃的面:"); String food = sc.next(); // 接收键盘输入的字符串 switch (food){ case "兰州拉面": System.out.println("吃兰州拉面"); break; case "重庆小面": System.out.println("吃重庆小面"); break; case "陕西油泼面": System.out.println("吃陕西油泼面"); break; case "北京炸酱面": System.out.println("吃北京炸酱面"); break; default: System.out.println("其他面都不卖"); break; } } }2.扩展知识点
default的位置和省略
- 位置不一定要在最下面
- 省略是没有语法问题,但运行时有default可以更完整的得知运行过程
case穿透
- 省略break时,会依次执行语句体,直到遇到break or 大括号
import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ // 用switch语句实现 Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); // 接收用户输入的整数 switch(num){ 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("输入的数字不在1-7之间"); break; } } }switch新特性
- JDK12及之后的版本
//使用switch新特性进行简化 switch(num){ case 1,2,3,4,5 -> System.out.println("工作日"); case 6,7 -> System.out.println("休息日"); default -> System.out.println("输入的数字不在1-7之间"); }switch和if第三章格式各自的使用场景
- if:用于范围的判断
- switch:例举有限数据,让操作者任选其一(即需要在多种情况下选择其一)
三. for(重点)
1.基础格式
public class HelloWorld { public static void main(String[] args){ /* for(初始化;条件;迭代){ 循环体; }*/ //打印5次hello world for (int i = 0; i < 5; i++) { System.out.println("Hello World!"); } } }2.例题
在实际开发中需要重复的情况下使用for循环
题目:1~100的累加
public class HelloWorld { public static void main(String[] args){ //用for循环写出一个1到100的累加和 //int sum = 0; 情况一 for(int i = 1; i <= 10; i++){ int sum=0; sum += i; // 情况二 } System.out.println(sum); } }四.while
1.基本语法
public class HelloWorld { public static void main(String[] args) { /* 初始化语句 while(布尔表达式){ 循环体 迭代语句 }*/ //用while循环写出一个1到100的累加和 int i = 1; int sum = 0; while (i <= 100) { sum = sum + i; i++; } } }2.for和while的区别之处
for和while的区别主要是:
1.初始化语句的位置
2.for循环次数和范围明确,while只明确循环结束条件
五.do...while
1.基本语法
循环变量初始化;
do{
循环体(语句);
循环变量迭代;
}while(循环条件);
注:先执行再判断,一定会执行一次
2.例题
如果李三不还钱,则赵四将一直使出五连鞭,直到李三说还钱为止
//编写一个main 方法 public static void main(String[] args) { //如果李三不还钱,则赵四将一直使出五连鞭,直到李三说还钱为 //[System.out.println("赵四问:还 钱吗?y/n")] do...while .. // //化繁为简 //(1) 不停的问还钱吗? //(2) 使用 char answer 接收回答, 定义一个 Scanner 对象 //(3) 在 do-while 的 while 判断如果是 y 就不在循环 //一定自己动脑筋.. Scanner myScanner = new Scanner(System.in); char answer = ' '; do System.out.println("赵四使出五连鞭~"); System.out.println("赵四问:还钱吗?y/n"); answer = myScanner.next().charAt(0); System.out.println("他的回答是" + answer); }while(answer != 'y');//判断条件很关键 System.out.println("李三还钱了"); } }