<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 流程控制

          共 20068字,需瀏覽 41分鐘

           ·

          2022-08-02 21:54

          收錄更新:https://github.com/cunyu1943/JavaPark

          目錄

          • 前言

          • 輸入輸出

            • 輸入

            • 輸出

          • 順序結(jié)構(gòu)

          • 分支結(jié)構(gòu)

            • if

            • switch

          • 循環(huán)結(jié)構(gòu)

            • while

            • for

            • continue & break

            • break

            • continue

          • 總結(jié)


          前言

          我們?cè)?上一篇文章 中講了各種操作符的使用技巧,接上一篇文章中的內(nèi)容,本次文章主要將流程控制,文章主要內(nèi)容安排如下:

          • 輸入輸出
          • 順序結(jié)構(gòu)
          • 分支結(jié)構(gòu)
          • 循環(huán)結(jié)構(gòu)

          輸入輸出

          之前的學(xué)習(xí)中,我們會(huì)發(fā)現(xiàn)都是通過(guò)定義變量并賦初值的方式來(lái)得到一個(gè)實(shí)現(xiàn)固定好值的變量。假如我們現(xiàn)在不想再以這種方式獲取變量值,而想要直接控制變量值,又該怎么做呢?這就涉及到 Java 中的輸入輸出相關(guān)知識(shí)了,以下就先來(lái)看看,如何實(shí)現(xiàn)從控制臺(tái)輸入,并從控制臺(tái)輸出吧。

          輸入

          先來(lái)看一個(gè)實(shí)例:

          import java.util.Scanner;

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/15 13:53
           * @description : 輸入
           */


          public class Main {
              public static void main(String[] args) {
                  Scanner scanner = new Scanner(System.in);
                  System.out.println("輸入整型");
                  int num = scanner.nextInt();
                  System.out.println("輸入的整型:" + num);

                  System.out.println("輸入字符型");
                  String name = scanner.next();
                  System.out.println("輸入的字符型:" + name);

                  System.out.println("輸入浮點(diǎn)型");
                  float floatNum = scanner.nextFloat();
                  System.out.println("輸入的字符型:" + floatNum);
                  double doubleNum = scanner.nextDouble();
                  System.out.println("輸入的字符型:" + doubleNum);


              }
          }

          要實(shí)現(xiàn)從控制臺(tái)輸入并讀取到我們的程序中時(shí),需要借助 Scanner 類,它屬于標(biāo)準(zhǔn)輸入流,其步驟總結(jié)如下:

          1. 首先,需要導(dǎo)入 Scanner 類。即 import java.util.Scanner,其中 import 表示導(dǎo)入某個(gè)類,并且只能放在程序的開頭。
          2. 然后創(chuàng)建 Scanner 對(duì)象。這里需要注意,創(chuàng)建時(shí)需要傳入 System.in,表示標(biāo)準(zhǔn)輸入流,與之對(duì)應(yīng)的 System.out 則代表標(biāo)準(zhǔn)輸出流。
          3. 最后就是讀取用戶輸入即可。這里讀取時(shí),調(diào)用不同的方法 Scanner 會(huì)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型,不用我們?nèi)ミM(jìn)行手動(dòng)轉(zhuǎn)換。

          從控制臺(tái)獲取不同類型的輸入,其常用方法如下:

          返回值方法名描述
          booleanhasNext()如果還有輸入,則返回 true,否則返回 false
          Stringnext()返回輸入的字符串,以空格為分隔符
          StringnextLine()返回輸入的字符串,以換行為分隔符
          intnextInt()輸入整型數(shù)
          longnextLong()輸入長(zhǎng)整型數(shù)
          floatnextFloat()輸入單精度數(shù)
          doublenextDouble輸入雙精度數(shù)

          這里值得注意的是 next()nextLine 兩個(gè)方法,雖然他們的作用都是用于獲取輸入的 String 類型的內(nèi)容,但是它們具體的處理機(jī)制又會(huì)有所區(qū)別。針對(duì) next() 而言,它會(huì)自動(dòng)消除有效字符前的空格,從而只返回輸入的字符,得到的字符串都不會(huì)帶有空格。也就是說(shuō),當(dāng)使用 next() 時(shí),如果遇到空格,此時(shí)就會(huì)停止錄入,只錄入空格前的內(nèi)容,而空格后的內(nèi)容則會(huì)保留到緩沖區(qū)。除了空格之外,next() 也會(huì)對(duì)制表符和換行符采用同樣的處理方式。而對(duì) nextLine() 來(lái)說(shuō),它會(huì)返回?fù)Q行符之前的所有內(nèi)容,甚至是帶空格的字符串。

          因此,在使用時(shí)一定要注意它們之間的區(qū)別,合理搭配使用,從而得到自己想要的結(jié)果。

          輸出

          其實(shí)從一開始的 hello world 到目前的代碼中,我們已經(jīng)接觸過(guò)輸出了,也就是我們的 System.out.println()

          其中 println 表示輸出并換行,如果我們不想換行,則使用 print 就可以了。

          通過(guò)上述方式所輸出的內(nèi)容都是擠在一起的,十分不方便我們閱讀。為了更加清晰的打印出我們所需要的結(jié)果,可以使用格式化輸出。

          要使用格式化輸出,需要使用 System.out.printf() 或者 System.out.format() 搭配占位符,然后在后面的參數(shù)格式化成指定格式即可,兩者達(dá)成的效果是等價(jià)的。常見的占位符如下:

          占位符描述
          %d格式化輸出整數(shù)
          %f格式化輸出浮點(diǎn)數(shù)
          %s格式化輸出字符串
          %x格式化輸出十六進(jìn)制整數(shù)
          %e格式化輸出科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)

          此外,我們還可以使用各種轉(zhuǎn)義字符來(lái)使得我們的輸出更為簡(jiǎn)潔,常見的轉(zhuǎn)義字符及意義如下表所示。

          轉(zhuǎn)義字符描述
          \n換行
          \t水平制表符
          \\表示一個(gè)反斜杠
          \'表示一個(gè)單引號(hào)
          \"表示一個(gè)雙引號(hào)
          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/15 14:48
           * @description : 輸出
           */


          public class Main {
              public static void main(String[] args) {
                  int num1 = 10;
                  double num2 = 34.9;
                  float num3 = 3.34f;
                  String name = "村雨遙";

                  //        換行及不換行輸出
                  System.out.println("公眾號(hào):" + name);
                  System.out.print("公眾號(hào):" + name);
                  System.out.println(num1);

                  //        格式化輸出
                  System.out.println("格式化輸出:");
                  System.out.printf("num1 = %d\n", num1);
                  System.out.format("num2 = %f\t num3 = %f\n", num2, num3);
                  System.out.printf("name = %s\n", name);
                  System.out.format("name = %s\n", name);
              }
          }

          順序結(jié)構(gòu)

          順序結(jié)構(gòu)

          順序結(jié)構(gòu)如上圖所示,它可以說(shuō)是最簡(jiǎn)單的,只需要按照解決問(wèn)題的順序?qū)懗鰧?duì)應(yīng)的語(yǔ)句即可,其執(zhí)行順序是自上而下,依次執(zhí)行的。就類似于我們求解一道數(shù)學(xué)題,你得根據(jù)題意一步一步來(lái),直至解出最后的答案。

          分支結(jié)構(gòu)

          上圖是分支結(jié)構(gòu),順序結(jié)構(gòu)雖然能夠處理計(jì)算、輸出等問(wèn)題,當(dāng)遇到需要判斷選擇時(shí),順序結(jié)構(gòu)已經(jīng)不能很好的解決了,此時(shí)就需要使用分支結(jié)構(gòu)。Java 中,分支結(jié)構(gòu)相關(guān)的語(yǔ)句主要涉及到 ifswitch 相關(guān),下面就分別來(lái)看一下。

          if

          1. 單次判斷

          當(dāng)我們只進(jìn)行一次判斷時(shí),可以使用一個(gè) if 語(yǔ)句包含一個(gè)條件表達(dá)式,其語(yǔ)法格式如下;

          if(條件表達(dá)式){
              執(zhí)行語(yǔ)句;
          }

          其執(zhí)行邏輯如下圖所示,如果條件表達(dá)式的值為 true,則執(zhí)行 if 語(yǔ)句塊中的執(zhí)行語(yǔ)句,否則就執(zhí)行 if 語(yǔ)句塊后邊的代碼;

          1. 多次判斷

          要進(jìn)行多次判斷時(shí),可以使用 if…else 的形式,其語(yǔ)法格式如下;

          if(條件表達(dá)式 1){
              執(zhí)行語(yǔ)句 1;
          else if(條件表達(dá)式 2){
           執(zhí)行語(yǔ)句 2;
          else if(…){
              …
          }…

          其執(zhí)行邏輯如下圖所示,如果條件表達(dá)式 1 為 true,則執(zhí)行執(zhí)行語(yǔ)句 1,否則接著判斷條件表達(dá)式 2,若為 true,則執(zhí)行執(zhí)行語(yǔ)句 2,以此類推,直到完成最后一個(gè)條件表達(dá)式的判斷。

          import java.util.Scanner;

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/15 15:45
           * @description : 條件判斷
           */


          public class Main {
              public static void main(String[] args) {
                  Scanner scanner = new Scanner(System.in);
                  System.out.println("請(qǐng)輸入分?jǐn)?shù):");
                  double score = scanner.nextDouble();

                  if (score < 0 || score > 100) {
                      System.out.println("輸入的分?jǐn)?shù)不在0-100之間,不符合要求");
                  } else if (score >= 90) {
                      System.out.println("A");

                  } else if (score >= 80) {
                      System.out.println("B");

                  } else if (score >= 60) {
                      System.out.println("C");
                  } else {
                      System.out.println("D");

                  }
              }
          }

          switch

          當(dāng)我們需要使用 if 進(jìn)行判斷時(shí),難免顯得有些繁瑣。此時(shí),我們就可以使用 switch 來(lái)進(jìn)行替代,通過(guò)判斷一個(gè)變量所屬范圍,從而劃分出不同的分支。

          switch 分支的語(yǔ)法格式如下:

          switch(表達(dá)式){
              case value1:
                  執(zhí)行語(yǔ)句1;
                  break;
              case value2:
                  執(zhí)行語(yǔ)句2;
                  break;
              ……
              default:
                  執(zhí)行語(yǔ)句;
                  break;
          }

          通過(guò)判斷表達(dá)式的值,然后執(zhí)行對(duì)應(yīng)值下的執(zhí)行語(yǔ)句,而 default 下的執(zhí)行語(yǔ)句表示如果 switch 表達(dá)式未匹配到對(duì)應(yīng)的值時(shí)所執(zhí)行的語(yǔ)句;

          一個(gè) switch 的實(shí)例如下:

          import java.util.Scanner;

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/15 15:49
           * @description : switch
           */


          public class Main {
              public static void main(String[] args) {
                  Scanner input = new Scanner(System.in);
                  System.out.print("請(qǐng)輸入該學(xué)生成績(jī):");
                  int grade = input.nextInt();//定義grade且獲取鍵盤輸入的整數(shù)
                  if (grade < 0 || grade > 100) {//輸入的整數(shù)范圍應(yīng)為0-100
                      System.out.println("輸入的成績(jī)有誤");
                      return;
                  }
                  switch (grade / 10) {
                      case 10:
                      case 9:
                          System.out.println("該學(xué)生成績(jī)優(yōu)秀");
                          break;
                      case 8:
                          System.out.println("該學(xué)生成績(jī)良好");
                          break;
                      case 7:
                          System.out.println("該學(xué)生成績(jī)中等");
                          break;
                      case 6:
                          System.out.println("該學(xué)生成績(jī)基本合格");
                          break;
                      default:
                          System.out.println("該學(xué)生成績(jī)不合格");
                          break;
                  }
              }
          }

          而在使用 switch 分支語(yǔ)法時(shí),需要遵循一定的規(guī)則:

          1. switch 中的變量類型可以是:byteshortintcharString (自 JDK 1.7 開始);
          2. switch 語(yǔ)句根據(jù)表達(dá)式的結(jié)果跳轉(zhuǎn)到對(duì)應(yīng)的 case 結(jié)果,然后執(zhí)行其后跟著的語(yǔ)句,直到遇到 break 才結(jié)束執(zhí)行;
          3. 默認(rèn)情況下,一般都會(huì)跟著一個(gè) default 的分支,用于未匹配到對(duì)應(yīng)情況時(shí)的執(zhí)行情況;

          循環(huán)結(jié)構(gòu)

          上圖為循環(huán)結(jié)構(gòu)示意,讓程序中遇到需要反復(fù)執(zhí)行某一個(gè)功能時(shí),我們發(fā)現(xiàn)順序結(jié)構(gòu)以及分支結(jié)構(gòu)實(shí)現(xiàn)起來(lái)都太過(guò)于繁瑣,于是又提出了循環(huán)結(jié)構(gòu)的相關(guān)概念。通過(guò)循環(huán)結(jié)構(gòu),我們就可以通過(guò)判斷循環(huán)語(yǔ)句,然后判斷是否進(jìn)入循環(huán)體。Java 中,循環(huán)結(jié)構(gòu)主要涉及的語(yǔ)句有 whileforcontinuebreak 等。

          while

          假設(shè)我們現(xiàn)在有一個(gè)題目,需要你計(jì)算 1 + 2 + 3 + …… + 50 的結(jié)果,你會(huì)怎么辦呢?

          這么寫么:

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 9:35
           * @description : while
           */


          public class Main {
              public static void main(String[] args) {
                  int sum = 1 + 2;
                  sum += 3;
                  sum += 4;
                  ……
                  sum += 50;
                  System.out.println("1 + 2 + 3 + …… + 50 = " + sum);
              }
          }

          這么寫就太麻煩了,計(jì)算到 50 的值就已經(jīng)很多了,假如有 1000,10000 甚至更大,那我們豈不是寫個(gè)好久才能寫完。這個(gè)時(shí)候我們就得找找有沒(méi)有簡(jiǎn)單的方法,能夠只寫幾句就實(shí)現(xiàn)相同的效果呢?答案是:Yes,這就是我們這一小節(jié)將要講到的循環(huán)。

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 9:35
           * @description : while
           */


          public class Main {
              public static void main(String[] args) {
                  int sum = 0;
                  int num = 1;
                  while (num <= 50) {
                      sum += num;
                      num++;
                  }
                  System.out.println("1 + 2 + 3 + …… + 50 = " + sum);
              }
          }

          從上面的實(shí)例,利用 while 循環(huán),我們就能輕易達(dá)成循環(huán)的效果。其語(yǔ)法格式如下:

          while(表達(dá)式){
              執(zhí)行語(yǔ)句;
          }

          只要表達(dá)式為 true,就會(huì)不斷循環(huán)執(zhí)行其中的執(zhí)行語(yǔ)句,直到表達(dá)式為 false,此時(shí)便跳出循環(huán),不再執(zhí)行其中的執(zhí)行語(yǔ)句。

          除開上面的形式之外,還有另一種 while 形式:

          do{
              執(zhí)行語(yǔ)句;
          }while(表達(dá)式);

          兩者的最大區(qū)別在于:do……while 無(wú)論 表達(dá)式 是否為 true,都至少會(huì)執(zhí)行一次。

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 9:35
           * @description : while
           */


          public class Main {
              public static void main(String[] args) {
                  int sum = 0;
                  int num = 10;
                  while (num <= 9) {
                      sum += num;
                      num++;
                  }
                  System.out.println("sum = " + sum);
              }
          }
          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 9:35
           * @description : while
           */


          public class Main {
              public static void main(String[] args) {
                  int sum = 0;
                  int num = 10;
                  do {
                      sum += num;
                      num++;
                  } while (num < 10);
                  System.out.println("sum = " + sum);
              }
          }

          觀察以上兩個(gè)實(shí)例,在 while 程序中,我們定義 num = 10,然后假設(shè) num <= 9 時(shí)就進(jìn)入循環(huán)體,而 ,所以不進(jìn)入循環(huán)體,直接打印 sum 的值為 0。而在 do…while 程序中,我們同樣定義 num = 10,然后假設(shè) num < 10 時(shí)繼續(xù)循環(huán),很明顯不滿足該情況,理應(yīng)跳出循環(huán),打印出 sum 的值為 10,說(shuō)明此時(shí)還是進(jìn)行了一次循環(huán)。

          因此,當(dāng)我們需要在 whiledo……while 之間做出選擇時(shí),如果我們最少需要進(jìn)行一次循環(huán),則選擇 do……while,其他情況下選用兩者都可以。

          for

          • 普通 for 循環(huán)

          除開 whiledo……while 之外,我們還有 for 循環(huán)來(lái)達(dá)成同樣的結(jié)果,只是表達(dá)方法不一樣。同樣以上面計(jì)算 1 + 2 + …… + 50 為例,可以寫成如下的形式:

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 10:20
           * @description : for 循環(huán)
           */


          public class Main {
              public static void main(String[] args) {
                  int sum = 0;
                  for (int num = 1; num <= 50; num++) {
                      sum += num;
                  }

                  System.out.println("1 + 2 + …… + 50 = " + sum);
              }
          }

          for 循環(huán)的語(yǔ)法形式如下:

          for(初始條件;終止條件;更新語(yǔ)句){
              循環(huán)語(yǔ)句;
          }

          for 循環(huán)的執(zhí)行步驟如下:

          1. 首先執(zhí)行初始條件,可以聲明一種類型,但可以初始化一個(gè)或多個(gè)循環(huán)控制變量,甚至可以放空;
          2. 接著判斷終止條件,如果為 true,則進(jìn)入循環(huán)體執(zhí)行循環(huán)語(yǔ)句;如果為 false,則終止循環(huán),執(zhí)行循環(huán)體后面的語(yǔ)句;
          3. 一次循環(huán)完成后,執(zhí)行更新語(yǔ)句來(lái)更新循環(huán)控制變量;
          4. 最后再次判斷終止條件,循環(huán)以上三個(gè)步驟;

          forwhile 最大的區(qū)別就在于 for 循環(huán)一般都是事先知道需要循環(huán)的次數(shù)的,而 while 循環(huán)則不需要。

          • 增強(qiáng) for 循環(huán)

          自 Java 5 后,引入了一種增強(qiáng)型 for 循環(huán),主要用于數(shù)字遍歷,其語(yǔ)法格式如下:

          for(聲明語(yǔ)句:表達(dá)式){
           // 循環(huán)語(yǔ)句
          }
          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 10:39
           * @description : 增強(qiáng) for 循環(huán)
           */


          public class Main {
              public static void main(String[] args) {
                  int[] numbers = {1456910};
                  for (int number : numbers) {
                      System.out.print(number + "\t");
                  }
              }
          }

          其中,聲明語(yǔ)句一般是聲明一個(gè)同數(shù)組數(shù)據(jù)類型相同的局部變量,而表達(dá)式則是要訪問(wèn)的數(shù)組名或者返回值是數(shù)組的方法。

          continue & break

          break

          主要用在循環(huán)語(yǔ)句或者 switch 語(yǔ)句中,表示跳出最里層的循環(huán),然后繼續(xù)執(zhí)行該循環(huán)下的語(yǔ)句。

          breakswitch 語(yǔ)句中的用法已經(jīng)見識(shí)過(guò)了,我們就來(lái)看看它在循環(huán)中的應(yīng)用。

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 10:51
           * @description : break & continue
           */


          public class Main {
              public static void main(String[] args) {
                  for (int i = 1; i < 10; i++) {
                      System.out.println("i = " + i);
                      if (i == 5) {
                          break;
                      }
                  }
              }
          }

          觀察結(jié)果可知,當(dāng) i == 5 時(shí),我們執(zhí)行了 break 語(yǔ)句,此時(shí)就直接跳出了 for 循環(huán),而不再進(jìn)行下一次的循環(huán)。

          continue

          continue 也同樣是應(yīng)用在循環(huán)控制結(jié)構(gòu)中,主要是讓程序跳出當(dāng)次循環(huán),進(jìn)而進(jìn)入下一次循環(huán)的迭代。

          for 循環(huán)中,執(zhí)行 continue 語(yǔ)句后,直接跳轉(zhuǎn)到更新語(yǔ)句,而不再執(zhí)行 continue 后的語(yǔ)句。而在 whiledo……while 循環(huán)中,執(zhí)行 continue 語(yǔ)句后,直接跳轉(zhuǎn)到表達(dá)式的判斷。

          /**
           * @author : cunyu
           * @version : 1.0
           * @className : Main
           * @date : 2021/4/16 10:51
           * @description : break & continue
           */


          public class Main {
              public static void main(String[] args) {
                  for (int i = 1; i < 10; i++) {
                      if (i == 5) {
                          continue;
                      }
                      System.out.println("i = " + i);
                  }
              }
          }

          觀察上述結(jié)果可知,當(dāng) i == 5 時(shí),我們執(zhí)行了 continue 語(yǔ)句,此時(shí)便跳出了當(dāng)次循環(huán),不再進(jìn)行后邊的打印語(yǔ)句,然后繼續(xù)下一次的循環(huán),所以最終打印的結(jié)果沒(méi)有 5.

          總結(jié)

          今天的內(nèi)容到此就結(jié)束了,老規(guī)矩,如果大家覺得有用的話,就給個(gè)點(diǎn)贊關(guān)注吧!

          其次就是對(duì)于文中遺漏或者存在欠缺的知識(shí)點(diǎn),還請(qǐng)大家不吝賜教,在評(píng)論區(qū)指出來(lái)!

          - END -
          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  18禁天堂 | 天天日夜夜 | 影音先锋少妇 | 婷婷久久国产视频 | 一级大香蕉网站视频 |