1.1🍭 程序流程控制介绍
在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。
- 顺序控制
- 分支控制
- 循环控制
1.2🥛单分支
代码实现
import java.util.Scanner;
public class If01 {
public static void main(String[] args) {
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁,
// 则输出 "你年龄大于 18,要对自己的行为负责,送入监狱"
//
//思路分析
//1. 接收输入的年龄, 应该定义一个 Scanner 对象
//2. 把年龄保存到一个变量 int age
//3. 使用 if 判断,输出对应信息
//应该定义一个 Scanner 对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
//把年龄保存到一个变量 int age
int age = myScanner.nextInt();
//使用 if 判断,输出对应信息
if(age > 18) {
System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
}
System.out.println("程序继续...");
}
}
运行结果
1.3🥕多分支
代码实现
import java.util.Scanner;
public class If02 {
public static void main(String[] args) {
//编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁, //则输出 "你年龄大于 18,要对
//自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了."
//
//思路分析
//1. 接收输入的年龄, 应该定义一个 Scanner 对象
//2. 把年龄保存到一个变量 int age
//3. 使用 if-else 判断,输出对应信息
//应该定义一个 Scanner 对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
//把年龄保存到一个变量 int age
int age = myScanner.nextInt();
//使用 if-else 判断,输出对应信息
if(age > 18) {
System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
} else {//双分支
System.out.println("你的年龄不大这次放过你了");
}
System.out.println("程序继续...");
}
}
运行结果
练习题
public class IfExercise01 {
public static void main(String[] args) {
// 求下列程序的输出结果
int x = 7;
int y = 4;
if(x>5) {
if(y>5) {
System.out.println(x+y);
}
System.out.println("哈哈");
} else
System.out.println("x is "+x);
}
}
输出结果
练习题
- 编写程序,声明 2 个 double 型变量并赋值。判断第一个数大于 10.0,且第 2 个数小于 20.0,打印两数之和。
double d1 = 10.1;
double d2 = 2.2;
double sum = d1+d2;
if (d1>10.0 && d2<=20.0)
{
System.out.println("d1+d2 = "+sum);
}
练习题
- 定义两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息
int n1 = 10;
int n2 = 20;
if((n1+n2) %3==0 && (n1+n2)%5==0)
{
System.out.println("这个数既能被3整除又能被5整除");
}
else
{
System.out.println("这个数不能被3整除又能被5整除");
}
练习题
- 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
(1)年份能被 4 整除,但不能被 100 整除;
(2)能被 400整除
int year = 2000;
if(year%400==0 || (year%4==0 && year%100!=0))
{
System.out.println(year+"是闰年");
}
else
{
System.out.println(year+"不是闰年");
}
输出结果
2.1🍥多分支
练习题
输入保国同志的芝麻信用分:
如果:
- 信用分为 100 分时,输出 信用极好;
- 信用分为(80,99]时,输出 信用优秀;
- 信用分为[60,80]时,输出 信用一般;
- 其它情况 ,输出 信用 不及格
- 请从键盘输入保国的芝麻信用分,并加以判断
/**
* 多分支
*/
import java.util.Scanner;
public class If03 {
public static void main(String[] args) {
// 输入保国同志的芝麻信用分:
// 如果:
// 1) 信用分为 100 分时,输出 信用极好;
// 2) 信用分为(80,99]时,输出 信用优秀;
// 3) 信用分为[60,80]时,输出 信用一般;
// 4) 其它情况 ,输出 信用 不及格
// 5) 请从键盘输入保国的芝麻信用分,并加以判断
Scanner myScanner = new Scanner(System.in);
int score = 0;
System.out.println("请输入:");
score = myScanner.nextInt();
// 分数的合理范围
if(score>=0 && score<=100) {
if (score >= 60 && score <= 80) {
System.out.println("信用一般");
} else if (score > 80 && score <= 99) {
System.out.println("信用优秀");
} else if (score == 100) {
System.out.println("信用极好");
} else {
System.out.println("信用不及格");
}
}else{
System.out.println("你的信用分输入有误,请重新输入:)");
}
}
}
}
输出结果
练习题
boolean b = true;
if (b==false){
System.out.println("a");
}else if(b){
System.out.println("b");
}else if(!b){
System.out.println("c");
}else{
System.out.println("d");
}
输出结果
b
练习题
boolean b = true;
if (b=false){
System.out.println("a");
}else if(b){
System.out.println("b");
}else if(!b){
System.out.println("c");
}else{
System.out.println("d");
}
输出结果
c
2.2🍬嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外 层分支。建议: 不要超过 3 层
(可读性不好)
练习题
参加歌手比赛,如果初赛成绩大于 8.0 进入决赛, 否则提示淘汰。并且根据性别提示进入男子组或女子组。
输入成绩和性别,进行判断和输出信息。提示: double score; char gender; 接收字符: char gender = scanner.next().charAt(0)
代码实现
import java.util.Scanner;
public class NextedIf {
public static void main(String[] args) {
// 参加歌手比赛,如果初赛成绩大于 8.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("你被淘汰了");
}
}
}
输出结果
练习题
import java.util.Scanner;
/**
* // 根据淡季和旺季的月份和年龄,打印票价
* // 4_10月是旺季
* // 成人(18-60):60
* // 儿童(<18):半价
* // 老人>60:1/3
*
* // 其他是淡季
* // 成人:40
* // 其他:20
*/
public class NextIfExercise {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = myScanner.nextInt();
System.out.println("请输入你的年龄");
int age = myScanner.nextInt();
if (month>=1 && month<=12) {
double money = 60.0;
if (month >= 4 && month <= 10) {
if (age>=18 && age<=60){
System.out.println("你是成年人,票价为:"+money);
}else if (age>=60){
System.out.println("你是老年人,票价为:"+money/2);
}else if (age>=1 && age<=18){
System.out.println("你是青少年,票价为:"+money/3);
}
} else{
if (age>=18 && age<=60){
money -= 20;
System.out.println("你是成年人,票价为:"+money);
}else{
money -= 40;
System.out.println("票价为"+money);
}
}
}else {
System.out.println("月份不合法请重新输入!");
}
}
}
输出结果
2.3🥟switch分支结构
代码实现
import java.util.Scanner;
public class Switch01 {
public static void main(String[] args) {
// 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
// a 表示星期一,b 表示星期二 …
// 根据用户的输入显示相应的信息.要求使用 switch 语句完成 代码
// 思路分析
// 1. 接收一个字符 , 创建 Scanner 对象
// 2. 使用 switch 来完成匹配,并输出对应信息代码
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g)");
char c1 = myScanner.next().charAt(0);//
//在 java 中,只要是有值返回,就是一个表达式
switch(c1) {
default:
System.out.println("你输入的字符不正确,没有匹配的");
break;
case 'a' :
System.out.println("今天星期一,猴子穿新衣");
break;
case 'b' :
System.out.println("今天星期二,猴子当小二");
break;
case 'c' :
System.out.println("今天星期三,猴子爬雪山..");
break;
//.....
}
System.out.println("退出了 switch ,继续执行程序");
}
}
运行结果
细节演示
/**
* switch细节
*/
public class SwitchDetail {
public static void main(String[] args) {
// Detail 1:
// switch(表达式)中的表达式数据类型 ,应和case后的常量类型一致
// 或者是可以自动转成可以相互比较的类型,比如输入的是char , 常量是int
// Detail 2:
// switch(表达式)中的表达式的返回值必须是:
// (byte、short、int、char、enum、String)
// Detail 3:
// case子句中的值必须是常量(1,'a'),而不能是变量
// Detail 4:
// default子句是可选的
// Detail 5:
// 如果没有写break , 程序会直接执行下一个语句块 ,直到遇到break
// Detail 6:
// case()中的值必须不同
// Detail 7:
// default子句位置可以任意
char c = 'a';
char c2 = 'b';
switch(c){
case 'a':
System.out.println("ok1");
break;
case 'a'+1 /* "a" */:
System.out.println("ok2");
break;
case 30 /* c2 */:
System.out.println("ok3");
break;
default:
System.out.println("ok4");
}
}
}
课堂练习
- 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 “other”。
- 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,输出"不合格"。(注:输入的成绩不能大于 100), 提示 成绩/60
- 根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
代码实现
import java.util.Scanner;
public class SwitchExercise01 {
public static void main(String[] args) {
// 1) 使用 switch 把小写类型的 char 型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出 "other"。
//使用 switch 把小写类型的
//char 型转为大写(键盘输入)。只转换 a->A, b->B, c, d, e. //其它的输出 "other"。
//创建 Scanner 对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入 a-e");
char c1 = myScanner.next().charAt(0);
switch(c1) {
case 'a' :
System.out.println("A");
break;
case 'b' :
System.out.println("B");
break;
case 'c' :
System.out.println("C");
break;
case 'd' :
System.out.println("D");
break;
case 'e' :
System.out.println("E");
break;
default :
System.out.println("你的输入有误~");
}
}
}
运行结果
练习题
//对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
//输出"不合格"。(注:输入的成绩不能大于 100), 提示 成绩/60
//思路分析
//1. 这道题,可以使用 分支来完成, 但是要求使用 switch
//2. 这里我们需要进行一个转换, 编程思路 :
// 如果成绩在 [60,100] , (int)(成绩/60) = 1
// 如果成绩在 [0,60) , (int)(成绩/60) = 0
//代码实现
double score = 1.1;
//使用 if-else 保证输入的成绩有有效的 0-100
if( score >= 0 && score <= 100) {
switch ((int)(score / 60)) {
case 0 :
System.out.println("不合格");
break;
case 1 :
System.out.println("合格");
break;
default :
System.out.println("输入有误");
break;
}
} else {
System.out.println("输入的成绩在 0-100");
}
运行结果
练习题
//根据用于指定月份,
//打印该月份所属的季节。
//3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
//[课堂练习, 提示 使用穿透 ]
//
//思路分析
//1. 创建 Scanner 对象, 接收用户输入
//2. 使用 int month 接收
//3. 使用 switch 来匹配 ,使用穿透来完成,比较简洁
Scanner myScanner = new Scanner(System.in);
System.out.println("输入月份");
int month = myScanner.nextInt();
switch(month) {
case 3:
case 4:
case 5:
System.out.println("这是春季");
break;
case 6:
case 7:
case 8:
System.out.println("这是夏季");
break;
case 9:
case 10:
case 11:
System.out.println("这是秋季");
break;
case 1:
case 2:
case 12:
System.out.println("这是冬季");
break;
default :
System.out.println("你输入的月份不对(1-12)");
}
运行结果
2.4🍒switch 和 if 的比较
- 如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6
种类型。虽然两个语句都可 以使用,建议使用 switch 语句。- 其他情况:对区间判断,对结果为 Boolean 类型判断,使用
if,if 的使用范围更广
待续未完…