Java流程控制

本文详细介绍了编程中的流程控制、分支结构(包括if、switch和多条件分支),以及循环结构(while、do...while、for),展示了Scanner类在获取用户输入的应用,并探讨了Debug调试工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 流程控制

  • 在一个程序中,有很多的代码,代码的执行顺序,就是流程。

  • 用于控制代码流程的方式,就是流程控制

  • 流程控制的分类:

    • 顺序结构:代码从上到下,从右到左依次执行。

    • 分支结构:依据一定的条件选择程序执行的路径。

    • 循环结构:重复的执行某一段代码的语法结构。

2. 分支结构

2.1 if语句

if

语法结构:

if(布尔表达式) {
		执行代码块;
   int a = 10;
}
if +CRUD 
.....
  • 语法解释:

    • 布尔表达式:判断条件,如果判断为true,则执行大括号内的语句。

    • 执行代码块:满足判断条件后所执行的代码语句。

  • 执行过程

    • 判断布尔表达式是否为true

    • true执行代码块。

    • false直接略过。

  • if…else

  • 语法结构:

  • if(布尔表达式) {
        执行代码块1;
    } else {
        执行代码块2;
    }

    语法解释:

  • 布尔表达式:判断条件,如果判断为true,则执行大括号内的语句。

  • 执行代码块1:满足判断条件后所执行的代码语句。

  • 执行代码块2:不满足判断条件后所执行的代码语句。

  • 注意事项:执行代码块1执行代码块2能且仅能执行一块代码。

  • 执行过程

    • 判断布尔表达式是否为true

    • true执行代码块1。

    • false执行代码块2。

  • if…else if…else

    • 语法结构:

    • if(布尔表达式1) {
          执行代码块1;
      } else if(布尔表达式2) {
          执行代码块2;
      } else if(布尔表达式3) {
          执行代码块3;
      } else if(布尔表达式……) {
          执行代码块……;
      } else if(布尔表达式n) {
          执行代码块n;
      } else {
          执行代码块n+1;
      }
      岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果:
      成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断
      
      class IfExam {
          public static void main(String[] args) {
              Scanner scan = new Scanner(System.in);
      
              System.out.println("请输入岳小鹏期末成绩:(0-100)");
              int score = scan.nextInt();
      
              if (score == 100) {
                  System.out.println("奖励一辆BMW");//be my wife!  BMW <---> MSN
              } else if (score > 80 && score <= 99) {
                  System.out.println("奖励一台iphone xs max");
              } else if (score >= 60 && score <= 80) {
                  System.out.println("奖励一个iPad");
              } else {
                  System.out.println("什么奖励也没有");
              }
          }
      }

2.2 switch语句

3. 循环结构

3.1 while循环

  • 语法结构:

  • switch(表达式变量) {
        case 常量1 :
            执行代码块1;
            break;
        case 常量2 :
            执行代码块2;
            break;
        case 常量…… :
            执行代码块……;
            break;
        case 常量n :
            执行代码块n;
            break;
        default:
          	执行代码块n+1;
    }

  • 语法解释:

    • 表达式变量:需要判断的值,与各个常量进行匹配。

    • 常量:满足的条件。

    • 执行代码块:满足条件后,所执行的代码块。

  • 执行过程

    • 表达式变量与常量进行匹配。

    • 如果有匹配到,执行对应的代码块内容。

    • 遇到break就终止代码执行。

    • 如果没匹配到,执行default下代码块的内容。

    • // 四季交替
      class SwitchTest {
          public static void main(String[] args) {
              String season = "winter";
              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;
              }
          }
      }

      注意事项:如下的两种情况都编译不通过

    • /*
      		boolean isHandsome = true;
      		switch(isHandsome){
      		
      		case true:
      			System.out.println("我好帅啊~~~");
      			break;
      		case false:
      			System.out.println("我好丑啊~~~");
      			break;
      		default:
      			System.out.println("输入有误~~~");
      		}
      		*/
      		//情况二
      		/*
      		int age = 10;
      		switch(age){
      		case age > 18:
      			System.out.println("成年了");
      			break;
      		default:
      			System.out.println("未成年");
      		}
      		*/

    • 常量类型:(表达式中的6种类型)

      • Jdk1.5之前:byteshortintchar

      • Jdk1.5:枚举类型

      • Jdk7:String

    • 常量值不能重复。

    • case后面只能跟常量,不能跟变量。

    • 每个case的语句体后面,一定要跟上一个break语句,否则就无法结束switch语句,并且发生case穿透。

    • default语句:可以写在任意位置,无论写在什么位置,都是最后去匹配;也可以不写,如果不写,就有可能一个语句都执行不到。建议把default语句加上。

  • /*
    例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
    
    说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
    */
    class SwitchCaseTest1 {
    	public static void main(String[] args) {
    		
    		/*
    		int score = 78;
    		switch(score){
    		case 0:
    		case 1:
    		case 2:
    			...
    		case 100:	
    		}
    		*/
    
    		/*
    		int score = 78;
    		if(score >= 60){	
    		}else{	
    		}
    		*/
    		
    		int score = 78;
    		switch(score / 10){
    		case 0:
    		case 1:
    		case 2:
    		case 3:
    		case 4:
    		case 5:
    			System.out.println("不及格");
    			break;
    		case 6:
    		case 7:
    		case 8:
    		case 9:
    		case 10:
    			System.out.println("及格");
    			break;
    
    		}
    		
    		//更优的解决方案:
    		switch(score / 60){
    		case 0:
    			System.out.println("不及格");
    			break;
    		case 1:
    			System.out.println("及格");
    			break;
    		}
    	
    	}
    }

    2.3 if语句与switch语句的区别

  • 相同点:都是进行判断,都可以表达分支结构。

  • 不同点:

    • if更加灵活,出现率较高,switch出现率较低。

    • switch的所有语句都可以使用if进行替代。

    • if语句更多的是做一些连续性区间值的判断,而switch语句无法做到。

    • if语句每次都需要获取表达式的值,而switch只获取一次表达式的值,所以switch的效率较高一些。

  • 定义:重复的执行某一件事。

  • 语法结构:

  • 初始化变量;
    while(布尔表达式) {
        执行代码块;
        初始化变量的自增;
    }
  • 注意:避免死循环。

  • 语法解释:

    • 初始化变量:声明一个变量,用于记录循环次数,只执行一次。

    • 布尔表达式:进入循环的条件。

    • 执行代码块:需要重复执行的代码块。

    • 初始化变量的自增

  • 执行过程:

  • 初始化变量。

  • 计算布尔表达式,如果为false则直接结束循环。

  • true进入循环,执行代码块

  • 执行初始化变量的自增。

  • 回到第二步

  • class WhileTest {
        public static void main(String[] args) {
            //遍历100以内的所有偶数
            int i = 1;
            while (i < 100) {
                if (i % 2 == 0) {
                    System.out.println(i);
                }
                i++;
            }
            //出了while循环以后,仍可以调用。
            System.out.println(i);//101
        }
    }

3.2 do…while循环

  • 语法结构:

  • 初始化变量;
    do {
        执行代码块;
        初始化变量的自增;
    } while(布尔表达式);

  • 语法解释:

    • 初始化变量:声明一个变量,用于记录循环次数,只执行一次。

    • 执行代码块:需要重复执行的代码块。

    • 初始化变量的自增

    • 布尔表达式:进入循环的条件。

  • 执行过程:

    1. 初始化变量。

    2. 进入循环,执行循环代码块。

    3. 初始化变量的自增。

    4. 计算布尔表达式,如果为false则直接结束循环。

    5. true则回到第二步。

public class WhileDemo {
    public static void main(String[] args) {
        //遍历100以内的偶数,并计算所有偶数的和及偶数的个数
        int sum = 0;
        int total = 0;
        int i = 0;
        do {
            if (i % 2 == 0) {
                sum += i;
                total++;
            }
            i++;
        }
        while (i <= 100);
        System.out.println("1-100偶数和是:" + sum);
        System.out.println("1-100偶数个数是:" + total);
    }
}

3.3 for循环

  • 语法结构:

  • for(初始化变量;布尔表达式;初始化变量的自增) {
        执行代码块;
    }
  • 语法解释:

    • 初始化变量:声明一个变量,用于记录循环次数,只执行一次。

    • 布尔表达式:进入循环的条件。

    • 初始化变量的自增

    • 执行代码块:需要重复执行的代码块。

  • 执行过程:

    1. 初始化变量。

    2. 计算布尔表达式,如果为false则直接结束循环。

    3. true则执行代码块。

    4. 初始化变量的自增。

    5. 回到第二步。

  • /*
    编写程序从1循环到520,并在每行打印一个值,
    另外在每个3的倍数行上打印出“I”,
    在每个5的倍数行上打印“Miss”,
    在每个7的倍数行上打印输出“You”。
    */
    class ForTest1 {
        public static void main(String[] args) {
            for (int i = 1; i <= 520; i++) {
                System.out.print(i + "  ");
                if (i % 3 == 0) {
                    System.out.print("I");
                }
                if (i % 5 == 0) {
                    System.out.print("Miss");
                }
                if (i % 7 == 0) {
                    System.out.print("You");
                }
                //换行
                System.out.println();
            }
        }
    }

    3.4 三种循环语句的区别

  • do…while语句和其他两种语句的区别:do…while语句至少可以执行一次,另外两种有可能一次都执行不了。

  • while语句和for的区别:

  • 代码层面:while语句声明的初始化变量,在while结束之后,还能继续使用;for中声明的初始化变量,在for结束之后,就无法使用了。

  • 设计层面:while语句一般用于描述相对模糊的范围,其他的条件;for用于描述相对准确,知道循环次数的循环。

3.5 跳转语句

  • 跳转语句:在循环的循环体语句中,结束循环,控制循环。

  • continue语句:结束本次循环,进入下次循环。

  • break语句:结束当前循环。

  • return语句:结束当前的方法。

3.6 循环的嵌套

在一次大的循环中,每次的循环内容(循环体)又是一个循环的操作,就需要在大循环中,定义一个小循环。称为循环的嵌套。

/*
嵌套循环的应用1:

九九乘法表
1 * 1 = 1
1 * 2 = 2  2 * 2 = 4
。。。
1 * 9 = 9 。。。 9 * 9 = 81

*/
class NineNineTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + " * " + i + " = " + (i * j) + "  ");
            }
            System.out.println();
        }
    }
}

4.Scanner类

  • Scanner使用的基本步骤

    • 导包

    • 实例化

    • 接收数据

    • /*
      如何从键盘获取不同类型的变量:需要使用Scanner类
      具体实现步骤:
      1.导包 import java.util.Scanner;
      2.Scanner 的实例化:Scanner scanner = new Scanner(System.in);
      3.调用Scanner类的相关方法,来获取指定类型的变量
      4.需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的数据类型不匹配时,
      会报异常:InputMismatchException 导致程序终止。
       */
      import java.util.Scanner;
      
      public class JavaDemo {
          public static void main(String[] args) {
              Scanner scanner = new Scanner(System.in);
              System.out.println("请输入你的姓名:");
              String name = scanner.next();
              System.out.println(name);
              System.out.println("请输入你的年龄:");
              int age = scanner.nextInt();
              System.out.println(age);
              System.out.println("请输入你的体重:");
              double weight = scanner.nextDouble();
              System.out.println(weight);
              System.out.println("你结婚了吗true/false:");
              boolean isMarried = scanner.nextBoolean();
              System.out.println(isMarried);
              System.out.println("请输入你的性别:");
              String gender = scanner.next();
              char genderChar = gender.charAt(0);
              System.out.println(genderChar);
              System.out.println("输入你的爱好");
              String hobby = scanner.nextLine();
              System.out.println(hobby);
          }
      }
      
        nextLine()方法是读取一整行,以一个回车符作为结束标记停止扫描
        next() / nextInt() / nextDouble()等方法是,读取到第一个结束符【空格、回车、Tab键】作为结束标记停止扫描

5. Debug

  • Debug调试程序:

  • 可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug

  • 使用方式:

    • 在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到那里)

    • 右键,选择Debug执行程序

    • 程序就会停留在添加的第一个断点处

    • 执行程序

    • f8:逐行执行程序(不进方法)

    • f7:进入到方法中(蓝色==>进入自定义方法)

    • f7:进入到方法中(红色==>进入j ava类库方法和自定义方法 )

    • shift+f8:跳出方法

    • f9:跳到下一个断点,如果没有下一个断点,那么就结束程序

    • F10:回到断点所在位置

    • 重新运行

    • 下一断点

    • 暂停

    • ctrl+f2:退出debug模式,停止程序

    • 查看所有断点

    • 禁用断点

    • Console:切换到控制台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gao_xu_sheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值