03-java流程控制语句

目录

3.1 表达式和语句

3.2 顺序结构

3.3 输入输出语句

3.3.1 输出语句

1、两种常见的输出语句

2、格式化输出

3.3.2 输入语句

输入各种类型的数据

3.4 分支语句

3.4.1 单分支条件判断:if

3.4.2 双分支条件判断:if...else

3.4.3 多分支条件判断:if...else if

3.4.4 if..else嵌套

3.4.5 switch...case多分支选择结构

语法格式:

避免case穿透

利用case的穿透性

if语句与switch语句比较

3.5 循环语句

3.5.1 for循环

3.5.2 关键字break

3.5.3 while循环

3.5.4 do...while循环

3.5.5 循环语句的区别

3.5.6 循环嵌套

3.5.7 关键字:continue

3.6 扩展

3.6.1 验证码

3.6.2 equal方法


  • 3.1 表达式和语句

    • 表达式一共分为三种:

      (1)变量或常量 + 运算符构成的计算表达式

      (2)new 表达式,结果是一个数组或类的对象。(后面讲)

      (3)方法调用表达式,结果是方法返回值或void(无返回值)。(后面讲

    • 表达式:变量或常量 + 运算符构成的计算表达式

  • 3.2 顺序结构

    • 顺序结构就是程序从上到下行地执行。表达式语句都是顺序执行的。并且上一行对某个变量的修改对下一行会产生影响。

    • public class TestStatement{
      	public static void main(String[] args){
      		int x = 1;
      		int y = 2;
      		System.out.println("x = " + x);		
              System.out.println("y = " + y);	
              //对x、y的值进行修改
              x++;
              y = 2 * x + y;
              x = x * 10;	
              System.out.println("x = " + x);
              System.out.println("y = " + y);
          }
      }

  • 3.3 输入输出语句

    • 3.3.1 输出语句

      • 1、两种常见的输出语句

        • 换行输出语句: System.out.println(输出内容);

        • 不换行输出语句: System.out.print(输出内容);

        • 拼接输出语句: System.out.print("姓名:" + name +",age:" + age);

      • 2、格式化输出

        • %d:十进制整数

        • %f:浮点数

        • %c:单个字符

        • %b:boolean值

        • %s:字符串

    • 3.3.2 输入语句

      • 输入各种类型的数据

        • int num = input.nextInt();

        • boolean b = input.nextBoolean();

        • long big = input.nextLong();

        • String str = input.next();

        • char c = input.next().charAt(0);

        • input.close();//代码没有错误,但是会造成JVM以外的操作系统相关内存没有得到释放。

      • 键盘输入代码的四个步骤: 1、申请资源,创建Scanner类型的对象 2、提示输入xx 3、接收输入内容 4、全部输入完成之后,释放资源,归还资源

    • 示例代码:
      
      public class TestPrintlnAndPrint {
          public static void main(String[] args) {
              String name = "小好";
              int age = 18;
              //对比如下两组代码:
              System.out.println(name);
              System.out.println(age);
      
              System.out.print(name);
              System.out.print(age);
              System.out.println(); //()里面为空,效果等同于换行,输出一个换行符
              //等价于 System.out.print("\n"); 或  System.out.print('\n');
              //System.out.print();//错误,()里面不能为空   核心类库PrintStream类中没有提供print()这样的方法
      
              //对比如下两组代码:
              System.out.print("姓名:" + name +",");//""中的内容会原样显示
              System.out.println("年龄:" + age);//""中的内容会原样显示
      
              System.out.print("name = " + name + ",");
              System.out.println("age = " + age);
          }
      }

      注意事项:

      换行输出语句,括号内可以什么都不写,只做换行处理
                  
      不换行输出语句,括号内什么都不写的话,编译报错
                  
      如果()中有多项内容,那么必须使用 + 连接起来
                  
      如果某些内容想要原样输出,就用""引起来,而要输出变量中的内容,则不要把变量名用""引起
  • 3.4 分支语句

    • 3.4.1 单分支条件判断:if

      • if语句第一种格式: if

        • if(条件表达式){ 语句体; }

      • 执行流程

        • - 首先判断条件表达式看其结果是true还是false - 如果是true就执行语句体 - 如果是false就不执行语句体

    • 3.4.2 双分支条件判断:if...else

      • if语句第二种格式: if...else

        • if(关系表达式) { 语句体1; }else { 语句体2; }

      • 执行流程

        • 首先判断关系表达式看其结果是true还是false

        • 如果是true就执行语句体1

        • 如果是false就执行语句体2

    • 3.4.3 多分支条件判断:if...else if

      • if语句第三种格式: if...else if ...else

        • if (判断条件1) { 执行语句1; } else if (判断条件2) { 执行语句2; }

      • 执行流程

        • 首先判断关系表达式1看其结果是true还是false

        • 如果是true就执行语句体1,然后结束当前多分支

        • 如果是false就继续判断关系表达式2看其结果是true还是false

        • 如果是true就执行语句体2,然后结束当前多分支

        • 如果是false就继续判断关系表达式…看其结果是true还是false

        • 如果没有任何关系表达式为true,就执行语句体n+1,然后结束当前多分支。

      • 案例:通过指定考试成绩,判断学生等级,成绩范围[0,100]
        
        - 90-100      优秀
        - 80-89        好
        - 70-79        良
        - 60-69        及格
        - 60以下    不及格
        
        import java.util.Scanner;
        
        public class Test11IfElseIf {
            public static void main(String[] args) {
                Scanner input = new Scanner(System.in);
                System.out.print("请输入成绩[0,100]:");
                int score = input.nextInt();
        
                if(score<0 || score>100){
                    System.out.println("你的成绩是错误的");
                }else if(score>=90 && score<=100){
                    System.out.println("你的成绩属于优秀");
                }else if(score>=80 && score<90){
                    System.out.println("你的成绩属于好");
                }else if(score>=70 && score<80){
                    System.out.println("你的成绩属于良");
                }else if(score>=60 && score<70){
                    System.out.println("你的成绩属于及格");
                }else {
                    System.out.println("你的成绩属于不及格");
                }
                
                input.close();
            }
        }
        
        import java.util.Scanner;
        
        public class Test11IfElseIf {
            public static void main(String[] args) {
                Scanner input = new Scanner(System.in);
                System.out.print("请输入成绩[0,100]:");
                int score = input.nextInt();
        
                if(score<0 || score>100){
                    System.out.println("你的成绩是错误的");
                }else if(score>=90){
                    System.out.println("你的成绩属于优秀");
                }else if(score>=80){
                    System.out.println("你的成绩属于好");
                }else if(score>=70){
                    System.out.println("你的成绩属于良");
                }else if(score>=60){
                    System.out.println("你的成绩属于及格");
                }else {
                    System.out.println("你的成绩属于不及格");
                }
        
                input.close();
            }
        }
        

    • 3.4.4 if..else嵌套

      • 在if的语句块中,或者是在else语句块中, 又包含了另外一个条件判断(可以是单分支、双分支、多分支)

      • 案例:从键盘输入一个年份值和月份值,输出该月的总天数
        
        要求:年份为正数,月份1-12。
        
        例如:输入2022年5月,总天数是31天。
        
        import java.util.Scanner;
        
        public class Test12NestIfElse {
            public static void main(String[] args){
                //从键盘输入一个年份和月份
                Scanner input = new Scanner(System.in);
        
                System.out.print("年份:");
                int year = input.nextInt();
        
                System.out.print("月份:");
                int month = input.nextInt();
        
                if(year>0){
                    if(month>=1 && month<=12){
                        //合法的情况
                        int days;
                        if(month==2){
                            if(year%4==0 && year%100!=0 || year%400==0){
                                days = 29;
                            }else{
                                days = 28;
                            }
                        }else if(month==4 || month==6  || month==9 || month==11){
                            days = 30;
                        }else{
                            days = 31;
                        }
                        System.out.println(year+"年" + month + "月有" + days +"天");
                    }else{
                        System.out.println("月份输入不合法");
                    }
                }else{
                    System.out.println("年份输入不合法");
                }
        
                input.close();
            }
        }

    • 3.4.5 switch...case多分支选择结构

      • 语法格式:
        • switch(表达式){ case 常量值1: 语句块1; 【break;】 case 常量值2: 语句块2; 【break;】 。。。 【default: 语句块n+1; 【break;】 】 }

      • 避免case穿透
        • 从键盘输入星期的整数值,输出星期的英文单

      • import java.util.Scanner;
        
        public class Test13SwitchDemo1 {
            public static void main(String[] args) {
                //定义指定的星期
                Scanner input = new Scanner(System.in);
                System.out.print("请输入星期值:");
                int weekday = input.nextInt();
        
                //switch语句实现选择
                switch(weekday) {
                    case 1:
                        System.out.println("Monday");
                        break;
                    case 2:
                        System.out.println("Tuesday");
                        break;
                    case 3:
                        System.out.println("Wednesday");
                        break;
                    case 4:
                        System.out.println("Thursday");
                        break;
                    case 5:
                        System.out.println("Friday");
                        break;
                    case 6:
                        System.out.println("Saturday");
                        break;
                    case 7:
                        System.out.println("Sunday");
                        break;
                    default:
                        System.out.println("你输入的星期值有误!");
                        break;
                }
        
                input.close();
            }
        }
      • 利用case的穿透性
        • 在switch语句中,如果case的后面不写break,将出现穿透现象,也就是一旦匹配成功,不会在判断下一个case的值,直接向后运行,直到遇到break或者整个switch语句结束,switch语句执行终止。

          • 练习:根据指定的月份输出对应季

        • import java.util.Scanner;
          
          /*
           * 需求:指定一个月份,输出该月份对应的季节。
           * 		一年有四季
           * 		3,4,5	春季
           * 		6,7,8	夏季
           * 		9,10,11	秋季
           * 		12,1,2	冬季
           */
          public class Test14SwitchDemo2 {
              public static void main(String[] args) {
                  Scanner input = new Scanner(System.in);
                  System.out.print("请输入月份:");
                  int month = input.nextInt();
          
                  /*
          		switch(month) {
                      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;
                      case 8:
                          System.out.println("夏季");
                          break;
                      case 9:
                          System.out.println("秋季");
                          break;
                      case 10:
                          System.out.println("秋季");
                          break;
                      case 11:
                          System.out.println("秋季");
                          break;
                      case 12:
                          System.out.println("冬季");
                          break;
                      default:
                          System.out.println("你输入的月份有误");
                          break;
          		}
          		*/
          
                  // 改进版
                  switch(month) {
                      case 1:
                      case 2:
                      case 12:
                          System.out.println("冬季");
                          break;
                      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;
                      default:
                          System.out.println("你输入的月份有误");
                          break;
                  }
          
                  input.close();
              }
          }
          
      • if语句与switch语句比较
        • if语句的条件是一个布尔类型值,if条件表达式为true则进入分支,可以用于范围的判断,也可以用于等值的判断,使用范围更广。

        • switch语句的条件是一个常量值(byte,short,int,char,枚举,String),只能判断某个变量或表达式的结果是否等于某个常量值,使用场景较狭窄。

        • 当条件是判断某个变量或表达式是否等于某个固定的常量值时,使用if和switch都可以,习惯上使用switch更多。当条件是区间范围的判断时,只能使用if语句。

        • 另外,使用switch可以利用穿透性,同时执行多个分支,而if...else没有穿透性。

  • 3.5 循环语句

    • 3.5.1 for循环

      • 语句格式

        • for(初始化语句①; 循环条件语句②; 迭代语句④){ 循环体语句③ }

      • 执行流程

        • 第一步:执行初始化语句①,完成循环变量的初始化; 第二步:执行循环条件语句②,看循环条件语句的值是true,还是false; - 如果是true,执行第三步; - 如果是false,循环语句中止,循环不再执行。 第三步:执行循环体语句③ 第四步:执行迭代语句④,针对循环变量重新赋值 第五步:根据循环变量的新值,重新从第二步开始再执行一遍

      • 死循环

        • for(;;){ 循环体语句块;//如果循环体中没有跳出循环体的语句,那么就是死循环 }

    • 3.5.2 关键字break

      • 使用场景:终止switch或者当前循环

    • 3.5.3 while循环

      • while循环语句基本格式

        • while (循环条件语句①) { 循环体语句②; }

      • 死循环

        • while(true){ 循环体语句;//如果此时循环体中没有跳出循环的语句,就是死循环 }

    • 3.5.4 do...while循环

      • 语句标准格式

        • do { 循环体语句①; } while (循环条件语句②);

      • 死循环

        • do{ 循环体语句;//如果此时循环体中没有跳出循环的语句,就是死循环 }while(true);

    • 3.5.5 循环语句的区别

      • 从循环次数角度分析

        • do...while循环至少执行一次循环体语句

        • for和while循环先循环条件语句是否成立,然后决定是否执行循环体,至少执行零次循环体语句

      • 如何选择

        • 遍历有明显的循环次数(范围)的需求,选择for循环

        • 遍历没有明显的循环次数(范围)的需求,循环while循环

        • 如果循环体语句块至少执行一次,可以考虑使用do...while循环

        • 本质上:三种循环之间完全可以互相转换,都能实现循环的功能

      • 三种循环结构都具有四要素:

        • (1)循环变量的初始化表达式

        • (2)循环条件

        • (3)循环变量的修改的迭代表达式

        • (4)循环体语句块

    • 3.5.6 循环嵌套

      • 嵌套循环:是指一个循环的循环体是另一个循环。比如for循环里面还有一个for循环,就是嵌套循环。当然可以是三种循环任意互相嵌套。

    • 3.5.7 关键字:continue

      • 使用场景:提前结束本次循环,继续下一次的循环

  • 3.6 扩展

    • 3.6.1 验证码

      • 随机数用String拼接

    • String randomCode = "";
              for (int i = 0; i < 6; i++) {
                  int randomNum = (int) (Math.random() * 10);
                  randomCode += randomNum;
              }
              System.out.println(randomCode);
    • 3.6.2 equal方法

      • 代码

    •         while(true){
                  System.out.print("请输入您的性别:");
                  String str = input.next();
                  if(str.equals("男")||str.equals("女")||str.equals("保密")){
                      System.out.println("您的性别"+str);
                      break;
                  }else{
                      System.out.println("输入无效,请重新输入");
                  }
              }
      • 注意

        • equals方法用于比较两个对象的内容是否相等。它是在Object类中定义的,但通常需要被子类重写以提供具体的比较逻辑。

        • 例:对于两个字符串对象s1和s2,如果它们包含相同的内容,则s1.equals(s2)返回true,即使这两个对象可能位于内存中的不同位置。

        • equals方法在Java中用于比较两个对象的内容是否相等,与==运算符在引用比较上的不同行为相区分。当需要比较对象内容是否相等时,应使用equals方法,并确保在自定义类中适当地重写该方法以提供正确的比较逻辑。

  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值