Java的流程控制

流程控制语句:顺序、选择、循环

  • 顺序结构

    • 特点:代码从上到下依次执行
    • 示例代码如下:

      public class CharDemo {
          public static void main(String[] args) {
              //定义一个变量存放字符'a'
              char a = 'a';
              System.out.println("a = " + a);
              char ch = 65535;
              //char类型定义的数据范围是0~65535,当值超出这个范围,则需做类型的强制转换,否则会报错。
              char ch1= (char) 65536;
              System.out.println("ch=" + ch);
              char c = '\u005d';
              System.out.println("c="+c);
          }
      }
      
  • 选择结构

    • 特点:根据条件执行对应的内容。

      • if 结构,if-else结构

      • 判断条件是布尔类型

      • 判断条件是一个范围

        • 格式

          if(条件){
             <语句>
          }
          
          if(条件){
             <语句1>
          }else {
             <语句2>
          }
          

          if(条件)else 后只跟一条语句时,可以把包裹该语句的大括号省略掉。(但是建议加上大括号,增强代码的可读性。)

        • 多重if

          //案例演示:
          /*
          需求描述:
          编写一个程序,根据考试成绩,输出相应的评定信息。
          成绩大于等于90分,输出“优”
          成绩大于等于80分且小于90分,输出“良”
          成绩大于等于60分小于80分,输出“中”
          成绩小于60分,输出“不及格”
          */
          public class ScoreAssess {
              public static void main(String[] args) {
                  /*
                  需求描述:
                  编写一个程序,根据考试成绩,输出相应的评定信息。
                  成绩大于等于90分,输出“优”
                  成绩大于等于80分且小于90分,输出“良”
                  成绩大于等于60分小于80分,输出“中”
                  成绩小于60分,输出“不及格”
                  */
          
                  System.out.print("请输入学生成绩:");
                  Scanner scanner = new Scanner(System.in);
                  float score = scanner.nextFloat();
                  if (score >= 90) {
                      System.out.println("优");
                  }
                  if (score >= 80 && score < 90) {
                      System.out.println("良");
                  }
                  if (score >= 60 && score < 80) {
                      System.out.println("中");
                  }
                  if (score < 60) {
                      System.out.println("不及格");
                  }
              }
          }
          

          运行结果如下:

          请输入学生成绩:59
          不及格

          if-else 结构

          格式:

          if(条件1){
             <语句1>
          }else if(条件2){
             <语句2>
          }else if(条件3){
             <语句3>
          }
          ...
          else {
             <语句n>
          }
          

          也可用 if -else 结构改写上面的案例代码

          public class ScoreAssess {
              public static void main(String[] args) {
                  /*
                  需求描述:
                  编写一个程序,根据考试成绩,输出相应的评定信息。
                  成绩大于等于90分,输出“优”
                  成绩大于等于80分且小于90分,输出“良”
                  成绩大于等于60分小于80分,输出“中”
                  成绩小于60分,输出“不及格”
                  */
          
                  System.out.print("请输入学生成绩:");
                  Scanner scanner = new Scanner(System.in);
                  float score = scanner.nextFloat();
                  if (score >= 90) {
                      System.out.println("优");
                  }else if (score >= 80) {
                      System.out.println("良");
                  }else if (score >= 60) {
                      System.out.println("中");
                  }else {
                      System.out.println("不及格");
                  }
              }
          }
          
          • else if(条件) 后面跟的语句,相当于对它上面 if(条件) 跟的语句 进行取反;即 else if (score >= 80) 相当于 score >= 80 && score < 90 。
        • 嵌套if

          • 将整个 if 块插入另一个 if 块中

          • 格式:

            if(表达式1){
              <语句1>
              if(表达式2){
                <语句1>
                if(表达式3){
                   <语句1>;
                   ...
                }else{
                   <语句2>
                }
              }else{
                <语句2>
              }
            }else {
              <语句2>
            }
            
          • 案例:

            //从键盘输入两个整数,经过判断输出他们的关系(大于、小于,等于)
            public class IntCompare {
                public static void main(String[] args) {
                    //从键盘输入两个整数,经过判断输出他们的关系(大于、小于,等于)
                    System.out.print("请输入第一个整数:");
                    Scanner scanner = new Scanner(System.in);
                    int num1 = scanner.nextInt();
                    System.out.print("请输入第二个整数:");
                    int num2 = scanner.nextInt();
                    if (num1 != num2){
                        if (num1 > num2) {
                            System.out.println(num1+"大于"+num2);
                        }else {
                            System.out.println(num1+"小于"+num2);
                        }
                    }else {
                        System.out.println(num1+"和"+num2+"相等");
                    }
                }
            }
            
      • switch结构

        • 判断条件是常量值

        • 格式

          switch(表达式){
             case 常量表达式1:
                语句1;break;
             case 常量表达式2:
                语句2;break;
             default:
                语句3;
          }
          
        • 执行流程

          • 先计算出 switch 表达式的值,再将该值与后面的 case 常量表达式的值逐一匹配。如果某个 case 语句常量表达式的值与switch表达式的值相等,则会执行该 case 表达式后面的语句。
          • 如果执行过程中遇到 break 语句,就会跳出这个 switch 结构,switch 结构终止执行。
          • break 不是必须的,是可以省略的。
          • default 语句:前面的 case 语句都不满足的情况下,才会执行 default 语句。default 不是必须的,是可以没有的。当 switch 表达式的值与 case 常量表达式的值都不匹配,当没有default语句时,则 switch 结构将终止执行。
          • JDK 7.0 以后 switch表达式的值可以是基本数据类型的 byte,short,int,char,以及 String 类型。
        • 案例1:

          public class WeekDemo1 {
              public static void main(String[] args) {
                  /*
                      从键盘输入1-7之间的任意数字,分别输出对应的信息
                      1——星期一
                      2——星期二
                      3——星期三
                      4——星期四
                      5——星期五
                      6——星期六
                      7——星期日
                   */
                  System.out.print("请输入1-7之间的任意数字:");
                  Scanner scanner = new Scanner(System.in);
                  int week = scanner.nextInt();
                  switch(week) {
                      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;
                      default:
                          System.out.println("该数字超出了1-7的范围");
                  }
              }
          }
          

          运行结果如下:

          请输入1-7之间的任意数字:7

          星期日

        • 验证:switch表达式的值可以是字符串。

        • 案例2:

          import java.util.Scanner;
          
          public class WeekDemo2 {
              public static void main(String[] args) {
                  /*
                      从键盘输入1-7之间的任意单词,分别输出对应的信息
                      Monday——星期一
                      Tuesday——星期二
                      Wednesday——星期三
                      Thursday——星期四
                      Friday——星期五
                      Saturday——星期六
                      Sunday——星期日
                   */
                  System.out.print("从键盘输入1-7之间的任意单词:");
                  Scanner scanner = new Scanner(System.in);
                  String week = scanner.next();
                  week = week.toUpperCase();//将字符串中的字符全部转成大写
                  switch (week) {
                      case "MONDAY":
                          System.out.println("星期一");
                          break;
                      case "TUESDAY":
                          System.out.println("星期二");
                          break;
                      case "WEDNESDAY":
                          System.out.println("星期三");
                          break;
                      case "THURSDAY":
                          System.out.println("星期四");
                          break;
                      case "FRIDAY":
                          System.out.println("星期五");
                          break;
                      case "SATURDAY":
                          System.out.println("星期六");
                          break;
                      case "SUNDAY":
                          System.out.println("星期日");
                          break;
                      default:
                          System.out.println("输入的单词有误!");
                  }
              }
          }
          

          运行结果如下:

          从键盘输入1-7之间的任意单词:Sunday
          星期日

  • 循环结构

    • 使用场景:

      • 问题一:反复输入数字,判断输出对应是星期几;
      • 问题二:求1到100的累加和;
    • 特点:循环执行某一部分代码。

      • while

      • 语法格式:

        while(循环条件){
           语句;
        }
        

        案例1:将小于5的正整数打印输出

        int n = 1;
        while(n<5) {
           //输出n的值
           n++;
        }
        

        ps:

        • n的值必须先进行初始化;
        • 循环变量n的值必须被改变;

        执行流程:

        • 首先判断循环条件是否成立,成立则执行循环体的语句;当不成立的时候,则跳出循环体,程序终止执行。

        案例2:

        • 求1到5的累加和
        public class PlusDemo {
            public static void main(String[] args) {
                //求1到5的累加和
                int sum = 0;
                int num = 1;
                while (num <= 5) {
                    sum = num + sum;
                    num++;
                }
                System.out.println("1到5的累加和是"+sum);
            }
        }
        

        运行结果如下:

        1到5的累加和是15

        案例3:

        • 循环输出26个英文字母,分两行输出
        public class CharDemo {
            public static void main(String[] args) {
                //循环输出26个英文字母,分两行输出
                char c = 'A';
                char finalChar = 'Z';
                while (c <= finalChar) {
                    if (c == 'O'){
                        System.out.println();
                    }
                    if (c == 'U') {
                        System.out.print("    ");
                    }
                    System.out.print(c+" ");
                    c = (char) (c + 1);
                }
            }
        }
        

        运行结果如下:

        A B C D E F G H I J K L M N
        O P Q R S T U V W X Y Z

      • do-while

        语法格式:

        do{
           语句;
        }while(循环条件);
        
        • 注意事项:
        • do-while循环至少执行一次;
        • 循环条件后的分号不能丢;

        案例1:

        //输出小于5的所有正整数
        int n = 1;
        do {
           //输出n的值
           n++;
        }while(n<5);
        

        案例2:

        //求1到5的累加和
        public class DoWhileDemo {
            public static void main(String[] args) {
                //求1到5的累加和
                int sum = 0;
                int num = 1;
                do {
                    sum = num + sum;
                    num++;
                }while(num <= 5);
                System.out.println("1到5的累加和是"+sum);
            }
        }
        

        输出结果如下:

        1到5的累加和是15

        案例3: 猜字游戏。要求猜一个介于1到10之间的数字。然后将猜测的值与实际值进行比较,并给出提示,以便能更接近实际值,直到猜中为止。

        public class DoWhileDemo2 {
            public static void main(String[] args) {
                //案例3: 猜字游戏。要求猜一个介于1到10之间的数字。然后将猜测的值与实际值进行比较,并给出提示,以便能更接近实际值,直到猜中为止。
                int result = (int) (Math.random() * 10 + 1);//使用随机数生成1到10之间的整数
                System.out.println("请求一个介于1到10之间的数字:");
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();
                do{
                    if (num < result) {
                        System.out.println("猜小了,请继续");
                        num = sc.nextInt();
                    }else {
                        System.out.println("猜大了,请继续");
                        num = sc.nextInt();
                    }
                }while (num != result);
                System.out.println("恭喜你猜对了!");
            }
        }
        

        运行结果如下:

        请求一个介于1到10之间的数字:
        5
        猜小了,请继续
        8
        猜大了,请继续
        7
        猜大了,请继续
        6
        恭喜你猜对了!

      • for

        语法格式:

        for(表达式1;表达式2;表达式3){
           语句
        }
        

        执行流程:

        • 表达式1对应的是对循环变量定义并初始化的语句;
        • 表达式2对应的是循环条件的表达式;
        • 表达式3对应的是对循环变量进行改变的表达式。

        案例1:输出小于5的所有正整数。

        for(int i=1;i<=5;i++){
           //输出语句
        }
        

        ps:分号不可省略,用于分隔三个表达式的内容

        案例2:使用 for 循环,求1到5的累加和。

        public class ForDemo {
            public static void main(String[] args) {
                //用for循环求1到5的累加和
                int sum = 0;
                for (int i=1;i<=5;i++){
                    sum = sum + i;
                }
                System.out.println("1到5的累加和是"+sum);
            }
        }
        

        运行结果如下:

        1到5的累加和是15

        上面的代码可以改写成:

        public class ForDemo {
            public static void main(String[] args) {
                //用for循环求1到5的累加和
                int i=1;
                int sum = 0;
                for (;;){
                    sum = sum + i;
                    i++;
                    if(i>5) break;
                }
                System.out.println("1到5的累加和是"+sum);
            }
        }
        

        案例2:

        public class NumberInput {
            public static void main(String[] args) {
                //循环输入数字1-10,如果输入0则跳出循环
                Scanner sc = new Scanner(System.in);
                while (true) {
                    System.out.print("请输入1-10的数字:");
                    int input = sc.nextInt();
                    if (input == 0) {
                        System.out.println("您输入了数字0,程序退出");
                        break;
                    }
                    System.out.println("您输入的数字是"+input);
                }
            }
        }
        

        运行结果如下:

        请输入1-10的数字:8
        您输入的数字是8
        请输入1-10的数字:7
        您输入的数字是7
        请输入1-10的数字:3
        您输入的数字是3
        请输入1-10的数字:0
        您输入了数字0,程序退出

      • 循环嵌套

        例1:求1! + 2! + 3! + ... + 10!

        public class JieChenDemo {
            public static void main(String[] args) {
                //求1! + 2! + 3! + ... + 10!
                int sum = 0;
                for (int i=1; i<=10; i++){
                    int temp = i;
                    int res = 1;
                    while (temp > 0){
                        System.out.print(temp+" ");
                        res = temp * res;
                        temp--;
                    }
                    System.out.println(temp+"的阶乘是"+res);
                    sum = sum + res;
                }
                System.out.println("1到10的阶乘结果是"+sum);
            }
        }
        

        运行结果如下:

        1 0的阶乘是1
        2 1 0的阶乘是2
        3 2 1 0的阶乘是6
        4 3 2 1 0的阶乘是24
        5 4 3 2 1 0的阶乘是120
        6 5 4 3 2 1 0的阶乘是720
        7 6 5 4 3 2 1 0的阶乘是5040
        8 7 6 5 4 3 2 1 0的阶乘是40320
        9 8 7 6 5 4 3 2 1 0的阶乘是362880
        10 9 8 7 6 5 4 3 2 1 0的阶乘是3628800
        1到10的阶乘结果是4037913

        例2:使用嵌套 while 循环输出10行10列的星号

        public class StartDemo1 {
            public static void main(String[] args) {
                //使用嵌套 while 循环输出10行10列的星号
                int i = 1;
                while (i <= 10) {
                    int k = 1;
                    while (k <= 10) {
                        System.out.print("* ");
                        k++;
                    }
                    System.out.print("\n");
                    i++;
                }
            }
        }
        

        运行结果如下:
        13while嵌套循环案例2输出.png
      • break语句和continue语句

        • break语句

          • 作用:

            • 结束当前循环的执行
            • 执行完break语句后,循环体中位于break语句后面的语句就不会被执行
            • 在多重循环中,break语句只向外跳一层
        • continue语句

          • 作用:

            • continue语句只能用在循环里
            • continue语句可以结束当前循环的执行,但是要继续下一次循环的执行。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358

推荐阅读更多精彩内容

  • Java流程控制 用户交互 Scanner Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互...
    cheerfish阅读 176评论 1 1
  • 总体结构: 顺序结构:按照从上自下的顺序依次执行选择结构:if,switch循环结构:while,do-while...
    以宇宙为海的蓝鲸阅读 108评论 0 0
  • Java流程控制 这一篇我想谈一谈Java中学过的基础语法。从大一入学开始学C、C++,到现在大三下期,学了很多东...
    姬空魂阅读 168评论 0 0
  • 流程控制 目录:顺序结构分支循环循环嵌套控制循环的关键词 总会出现一种场景:要满足某个条件时,才去做一件事情。 ...
    Ansaxnsy阅读 700评论 0 1
  • 资料来源: 流程控制 - 廖雪峰的网站 在Java程序中,JVM默认总是顺序执行以分号;结束的语句。但是,在实际的...
    PyYun阅读 123评论 0 0