2.5.2 程序流程控制:if-else结构

  • 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
  • 语句块只有一条执行语句时,一对{}可以省略,但建议保留
  • if-else语句结构,根据需要可以嵌套使用
  • 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
  • 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓 当多个条件是“包含”关系时,“小上大下 / 子上父下”
  • 如果实际开发中需要嵌套多层,考虑是否有其他实现方法。

即:
针对条件表达式:
>多个条件表达式之间是“互斥”关系(或没有交集),哪个判断和执行语句声明在上面还是下面无所谓。
>多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
>多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则范围小的没有机会执行。

如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1. 导包:import java.util.Scanner;
2. Scanner的实例化: Scanner scan = new Scanner(System.in);
3. 调用Scanner类的相关方法,来获取指定类型的变量
4. 注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。

  1. import java.util.Scanner;
  2. class ScannerTest{
  3. public static void main(String[] args) {
  4. Scanner scan = new Scanner(System.in);
  5. System.out.println("请输入你的姓名:");
  6. String name = scan.next();
  7. System.out.println(name);
  8. System.out.println("请输入你的年龄:");
  9. int age = scan.nextInt();
  10. System.out.println(age);
  11. System.out.println("请输入你的体重:");
  12. double weight = scan.nextDouble();
  13. System.out.println(weight);
  14. System.out.println("你喜欢我嘛?(true/false)");
  15. boolean isLove = scan.nextBoolean();
  16. System.out.println(isLove);
  17. //对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
  18. System.out.println("请输入你的性别:(男/女)");
  19. String gender = scan.next(); //"男"
  20. char genderChar = gender.charAt(0); // 获取索引为0位置上的字符
  21. System.out.println(genderChar);
  22. }
  23. }

岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断。

  1. import java.util.Scanner;
  2. class IfTest {
  3. public static void main(String[] args)
  4. {
  5. Scanner scan = new Scanner(System.in);
  6. System.out.println("请输入小岳期末成绩:(0-100)");
  7. int score = scan.nextInt();
  8. if (score == 100){
  9. System.out.println("奖励一辆车");
  10. }else if(score > 80 && score <= 99){ //else if(score > 80)
  11. System.out.println("奖励一部手机");
  12. }else if(score >= 60 && score <= 80){ //else if(score >= 60)
  13. System.out.println("奖励一部ipad");
  14. }else{
  15. System.out.println("什么奖励也没有");
  16. }
  17. }
  18. }

由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。

  1. /*
  2. 由键盘输入三个整数分别存入变量num1、num2、num3,
  3. 对它们进行排序(使用 if-else if-else),并且从小到大输出。
  4. */
  5. import java.util.Scanner;
  6. class IfTest2 {
  7. public static void main(String[] args) {
  8. Scanner scan = new Scanner(System.in);
  9. System.out.println("请输入第一个整数:");
  10. int num1 = scan.nextInt();
  11. System.out.println("请输入第二个整数:");
  12. int num2 = scan.nextInt();
  13. System.out.println("请输入第三个整数:");
  14. int num3 = scan.nextInt();
  15. if (num1 >= num2){
  16. if (num3 >= num1){
  17. System.out.println(num2 + "," + num1 + "," + num3);
  18. } else if(num3 <= num2){
  19. System.out.println(num3 + "," + num2 + "," + num1);
  20. } else{
  21. System.out.println(num2 + "," + num3 + "," + num1);
  22. }
  23. }else{
  24. if (num3 >= num2){
  25. System.out.println(num1 + "," + num2 + "," + num3);
  26. } else if(num3 <= num1){
  27. System.out.println(num3 + "," + num1 + "," + num2);
  28. } else{
  29. System.out.println(num1 + "," + num3 + "," + num2);
  30. }
  31. }
  32. }
  33. }

或者:if (num1 >= num2 && num1 >= num3){}
if-else语句练习1:

  1. //1)对下列代码,若有输出,指出输出结果。
  2. int x = 4;
  3. int y = 1;
  4. if (x > 2) {
  5. if (y > 2)
  6. System.out.println(x + y);
  7. System.out.println("atguigu");
  8. } else
  9. System.out.println("x is " + x);
  10. //输出结果:atguigu,语句块只有一条执行语句时,一对{}可以省略
  11. int x = 4;
  12. int y = 1;
  13. if (x > 2) {
  14. if (y > 2)
  15. System.out.println(x + y);
  16. //System.out.println("atguigu");
  17. } else //就近原则
  18. System.out.println("x is " + x);
  19. //输出结果:x is 4

输出结果:atguigu,语句块只有一条执行语句时,一对{}可以省略

课后练习2:如何获取一个随机数:10-99

random

public static double random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. Returned values are chosen pseudorandomly with (approximately) uniform distribution from that range.
返回一个大于或等于0.0且小于1.0的带正号的双精度值。返回值是从该范围内(近似)均匀分布的伪随机选择。
int value = (int)Math.random() 90 + 10; // [0.0, 1.0) —-> [0.0, 90.0) —->[10.0, 100.0)—->[10,99]
公式:[a, b] : (int)Math.random()
(b - a + 1) + a)

  1. import java.util.Scanner;
  2. class IfExper1 {
  3. public static void main(String[] args) {
  4. Scanner scan = new Scanner(System.in);
  5. System.out.println("请输入您的身高:(cm)");
  6. int height = scan.nextInt();
  7. System.out.println("请输入您的净资产:(百万)");
  8. double wealth = scan.nextDouble();
  9. /*
  10. //方式1:
  11. System.out.println("请输入您的相貌是否端正:(true/false)");
  12. boolean isHandsome = scan.nextBoolean();
  13. if(height >= 180 && wealth >= 1 && isHandsome){
  14. System.out.println("你实在太优秀啦!");
  15. } else if (height >= 180 || wealth >= 1 || isHandsome){
  16. System.out.println("你目前很不错!");
  17. } else{
  18. System.out.println("你需要努力的地方很多哦!");
  19. }
  20. */
  21. //方式2:
  22. System.out.println("请输入您的相貌是否端正:(YES/NO)"); // 如果是“是/否”,判断不成功
  23. String isHandsome = scan.next();
  24. if(height >= 180 && wealth >= 1 && isHandsome.equals("YES")){
  25. System.out.println("你实在太优秀啦!");
  26. } else if (height >= 180 || wealth >= 1 || isHandsome.equals("YES")){
  27. System.out.println("你目前很不错!");
  28. } else{
  29. System.out.println("你需要努力的地方很多哦!");
  30. }
  31. }
  32. }

2.5.3 程序流程控制:switch-case结构

  1. switch(表达式){
  2. case 常量1:
  3. 语句1;
  4. // break;
  5. case 常量2:
  6. 语句2;
  7. // break;
  8. case 常量N:
  9. 语句N;
  10. // break;
  11. default:
  12. 语句;
  13. // break;
  14. }

switch语句有关规则
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short, char,int,枚举 (jdk 5.0),String (jdk 7.0);
case子句中的值必须是常量,不能是变量名或不确定的表达式值;  同一个switch语句,所有case子句中的常量值互不相同;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾。
default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时, 执行default

  1. class SwitchCaseTest{
  2. public static void main(String[] args) {
  3. int num = 3;
  4. switch(num){
  5. case 0:
  6. System.out.println("zero");
  7. case 1:
  8. System.out.println("one");
  9. case 2:
  10. System.out.println("two");
  11. case 3:
  12. System.out.println("three");
  13. case 4:
  14. System.out.println("four");
  15. case 5:
  16. System.out.println("five");
  17. }
  18. }
  19. }
  20. /*
  21. three
  22. four
  23. five
  24. */