其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
5.1 顺序结构
1、结构: 没有分支结构和循环结构的都是顺序结构。
5.2 分支结构:if-else结构
1、格式: if-else结构有三种格式
程序举例:
class IfTest { public static void main(String[] args) { //举例1 int heartBeats = 79; if (heartBeats < 60 || heartBeats > 100) { System.out.println("需要进行进一步检查"); } System.out.println("检查结束。"); //举例2 int age = 23; if (age < 18) { System.out.println("你可以看动画片!"); }else{ System.out.println("你可以看成人电影了!"); } //举例3 if (age < 0) { System.out.println("您输入的数据非法"); }else if(age < 18){ System.out.println("青少年时期"); }else if(age < 35){ System.out.println("青壮年时期"); }else if(age < 60){ System.out.println("中年时期"); }else if(age < 120){ System.out.println("老年时期"); }else{ System.out.println("你要成仙啊!"); } } }
运行结果如下:
D:\MyDownloads\JAVA\my_java_code\day03>java IfTest 检查结束。 你可以看成人电影了! 青壮年时期
2、使用说明:
3.1 先验知识:
这里涉及一个从键盘输入的问题,如何从键盘获取不同类型的变量,需要使用 Scanner 类
具体实现步骤:
1、导包:import java.util.Scanner;
2、Scanner 的实例化:Scanner scan = new Scanner(System.in);
3、调用 Scanner 类的相关方法(next()/nextXxxx()),来获取指定类型的变量,可以获取整型、浮点型、布尔型和字符串等,通过在 api 文档中查找 Scanner 类找到对应的方法。
注意:
//1、导包:import java.util.Scanner; import java.util.Scanner; class ScannerTest { public static void main(String[] args) { //Scanner 的实例化:Scanner scan = new Scanner(System.in); Scanner scan = new Scanner(System.in); //调用 Scanner 类的相关方法 System.out.println("请输入你的姓名:"); String name = scan.next(); System.out.println("请输入你的年龄:"); int age = scan.nextInt(); System.out.println("请输入你的体重:"); double weight = scan.nextDouble(); System.out.println("你是否单身?(true/false)"); boolean islove = scan.nextBoolean(); System.out.println("请输入你的性别:(男/女)"); String gender = scan.next(); char genderChar = gender.charAt(0);//获取索引位置上的字符,java索引从0开始。 //对于 char 型的获取,Scanner没有提供相关的方法,只能获取一个字符串 System.out.println(); System.out.println("姓名:" + name + "\n" + "年龄:" + age + "\n" + "体重:" + weight + "\n" + "是否单身?" + islove + "\n" + "性别:" + genderChar); } }
D:\MyDownloads\JAVA\my_java_code\day04>java ScannerTest 请输入你的姓名: 钱多多 请输入你的年龄: 20 请输入你的体重: 45 你是否单身?(true/false) true 请输入你的性别:(男/女) 女 姓名:钱多多 年龄:20 体重:45.0 是否单身?true 性别:女
3.2 课后练习题1
程序:
//1、导包 import java.util.Scanner; class IfTest1 { public static void main(String[] args) { //scanner实例化,scan是变量名,自己定义的。 Scanner scan = new Scanner(System.in); 调用 Scanner 类的相关方法 System.out.println("请输入越小彭的期末成绩:(0-100)"); int score = scan.nextInt(); if (score == 100){ System.out.println("奖励一辆BMW!"); }else if(score > 80 ){ System.out.println("奖励一台iphone xs max!"); }else if(score >= 60){ System.out.println("奖励一个 iPad!"); }else{ System.out.println("你还想要奖励!"); } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java IfTest 请输入越小彭的期末成绩:(0-100) 45 你还想要奖励!
3.3 课后练习2
程序:
//1、导包 import java.util.Scanner; class IfTest2 { public static void main(String[] args) { //scanner实例化,scan是变量名,自己定义的。 Scanner scan = new Scanner(System.in); //调用 Scanner 类的相关方法 System.out.println("请输入第一个整数:"); int num1 = scan.nextInt(); System.out.println("请输入第二个整数:"); int num2 = scan.nextInt(); System.out.println("请输入第三个整数:"); int num3 = scan.nextInt(); if (num1 >= num2){ if (num3 >= num1){ System.out.println(num2 + " <= " + num1 + " <= " + num3); }else if(num3 <= num2){ System.out.println(num3 + " <= " + num2 + " <= " + num1); }else{ System.out.println(num2 + " <= " + num3 + " <= " + num1); } }else{ if (num3 <= num1){ System.out.println(num3 + " <= " + num1 + " <= " + num2); }else if (num3 >= num2){ System.out.println(num1 + " <= " + num2 + " <= " + num3); }else{ System.out.println(num1 + " <= " + num3 + " <= " + num2); } } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java IfTest2 请输入第一个整数: 43 请输入第二个整数: -34 请输入第三个整数: -34 -34 <= -34 <= 43
3.4 课后习题3
3.5 课后练习4
int [a,b] = (int)(Math.random() * (b - a +1) + a);
强制转换符后面记得加括号。
程序:
//1、导包 import java.util.Scanner; class IfTest3 { public static void main(String[] args) { //scanner实例化,scan是变量名,自己定义的。 Scanner scan = new Scanner(System.in); //调用 Scanner 类的相关方法 System.out.println("请输入你的彩票号码(两位数):"); int num = scan.nextInt(); int num1 = num / 10, num2 = num % 10; int value = (int)(Math.random() * 90 + 10);//产生[10,99]内的任意两位数。 int value1 = value /10, value2 = value % 10; if (num1 > 9 && num1 < 1){ System.out.println("请输入正确的两位数字!"); }else if (num == value){ System.out.println("奖金10000美元。"); }else if(num1 == value2 && num2 == value1){ System.out.println("奖金3000美元。"); }else if(num1 == value1 || num2 == value2){ System.out.println("奖金1000美元。"); }else if(num1 == value2 || num2 == value1){ System.out.println("奖金500美元。"); }else{ System.out.println("彩票作废!"); } System.out.println("正确的中奖号码是:" + value); } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java IfTest3 请输入你的彩票号码(两位数): 45 彩票作废! 正确的中奖号码是:67
3.6 课后练习5
程序:
//1、导包 import java.util.Scanner; class IfTest4 { public static void main(String[] args) { //scanner实例化,scan是变量名,自己定义的。 Scanner scan = new Scanner(System.in); //调用 Scanner 类的相关方法 System.out.println("请输入你的身高(cm):"); double height = scan.nextDouble(); System.out.println("请输入你的财富(千万):"); double wealth = scan.nextDouble(); System.out.println("请输入你是否帅(是/否):"); String ishandsome = scan.next(); if (height > 180 && wealth >= 1 && ishandsome.equals("是")){ System.out.println("我一定要嫁给他!!!"); }else if(height >180 || wealth >= 1 || ishandsome.equals("是")){ System.out.println("嫁吧,比上不足,比下有余。"); }else{ System.out.println("不嫁!"); } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java IfTest4 请输入你的身高(cm): 178 请输入你的财富(千万): 0.5 请输入你是否帅(是/否): 是 嫁吧,比上不足,比下有余。
5.3 分支结构:switch-case 结构
1. 格式:
2. 使用说明:
3、应用举例
class SwitchCaseTest { public static void main(String[] args) { String season = "summer"; switch (season) { case "spring": System.out.println("春暖花开"); break; case "summer": System.out.println("夏日炎炎"); break; case "autumn": System.out.println("秋高气爽"); break; case "winter": System.out.println("冬雪皑皑"); break; default: System.out.println("季节输入有误"); break; } } }
D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseTest 夏日炎炎
4. 课后习题
这里所有的课后习题在一个 .java 文件中,所以导包放在所有程序的最上方。
4.1 课后习题1
程序:
class SwitchCaseExer1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入一个字母:"); String word = scan.next(); char letter = word.charAt(0); //取字符串对应索引位置上的字符 switch (letter) { 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("other"); break; } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseExer1 请输入一个字母: d D D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseExer1 请输入一个字母: D other
4.2 课后习题2
这里涉及一个知识点:当调用完执行语句之后,顺序执行其他case结构中的执行语句,直到遇到 break 关键字或此switch-case结构执行到末尾为止。
程序:
//编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序 //输出输入的日期为2019年的第几天。 class SwitchCaseExer2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入month:"); int month = scan.nextInt(); System.out.println("请输入day:"); int day_month = scan.nextInt(); int day_year = 0; switch (month) { case 12: day_year = day_year + 30; case 11: day_year = day_year + 31; case 10: day_year = day_year + 30; case 9: day_year = day_year + 31; case 8: day_year = day_year + 31; case 7: day_year = day_year + 30; case 6: day_year = day_year + 31; case 5: day_year = day_year + 30; case 4: day_year += 31; case 3: day_year += 28; case 2: day_year += 31; case 1: day_year = day_year + day_month; System.out.println("输入的日期为2019年的第几天:" + day_year); } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseExer2 请输入month: 2 请输入day: 1 输入的日期为2019年的第几天:32
4.3 课后习题3
说明:
1、凡是可以使用switch-case的情况都可以使用if-else。反之,不成立。
2、如果有一种情况,两种分支结构都可以使用,则优先使用switch-case(switch-case中的情况不太多时)。原因:switch-case执行效率稍高。
程序:
class SwitchCaseExer3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); int year = scan.nextInt(); System.out.println("请输入月份:"); int month = scan.nextInt(); System.out.println("请输入日期:"); int day_month = scan.nextInt(); int day_year = 0; //定义一个变量放置最终结果 switch (month) { case 12: day_year = day_year + 30; case 11: day_year = day_year + 31; case 10: day_year = day_year + 30; case 9: day_year = day_year + 31; case 8: day_year = day_year + 31; case 7: day_year = day_year + 30; case 6: day_year = day_year + 31; case 5: day_year = day_year + 30; case 4: day_year += 31; case 3: //day_year += 28; if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0){ day_year += 29; }else{ day_year += 28; } case 2: day_year += 31; case 1: day_year = day_year + day_month; System.out.println(year + "年" + month + "月" + day_month + "日是当年的第" + day_year + "天"); } } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseExer3 请输入年份: 2020 请输入月份: 3 请输入日期: 1 2020年3月1日是当年的第61天
4.4 课后练习4
程序:
class SwitchCaseExer4 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入年份:"); int year = scan.nextInt(); String animal = ""; //定义一个变量放置最终结果, switch (year % 12) { case 4: animal += "鼠"; break; case 5: animal += "牛"; break; case 6: animal += "虎"; break; case 7: animal += "兔"; break; case 8: animal += "龙"; break; case 9: animal += "蛇"; break; case 10: animal += "马"; break; case 11: animal += "羊"; break; case 0: animal += "猴"; break; case 1: animal += "鸡"; break; case 2: animal += "狗"; break; case 3: animal = animal + "猪"; } System.out.println(year + "年是" + animal + "年"); } }
运行结果:
D:\MyDownloads\JAVA\my_java_code\day04>java SwitchCaseExer4 请输入年份: 2019 2019年是猪年