天天看點

【Java 基礎文法】邏輯控制

一、邏輯控制語句

1. 順序結構

像我們寫的代碼,執行時會按照從上到下一行一行的執行。這就是順序結構,不同的順序,結果可能就不一樣。如

System.out.println(1)
System.out.println(2)    
System.out.println(3)           

該代碼結果為 1(換行)2(換行)3,但是如果把順序改變結果就變了

System.out.println(2)
System.out.println(3)    
System.out.println(1)           

該代碼結果就變為 2(換行)3(換行)1

2. 分支結構

2.1 if 語句

和 C 語言一樣,在 Java 中 if 語句也有三種基本的形式

  • 形式一
    if(布爾表達式){
        // 條件滿足時執行的代碼
    }           
  • 形式二
    if(布爾表達式){
        // 條件滿足時執行的代碼
    }else{
        // 條件不滿足時執行的代碼
    }           
  • 形式三
    if(布爾表達式1){
        // 條件1滿足時執行的代碼
    }else if(布爾表達式2){
        // 條件2滿足時執行的代碼
    }else{
        // 條件都不滿足時執行的代碼
    }           

但是從形式上我們就可以看出還是有一些不同的

  1. 條件表達式必須是布爾值,不能像 C 語言一樣直接使用一個數值,如
    int a = 10;
    if(a){
        System.out.println(a);
    }           
    這種代碼就是錯的,條件必須是布爾值
    int a = 10;
    if(a > 0){
        System.out.println(a);
    }           
    這種代碼就是正确的
  2. 代碼風格問題,比如我寫 C 語言時喜歡把一對大括号并列在行首。但是在 java 中更推薦上述三種形式那樣的風格,将 { 放在 if 或 else 同一行
  3. 還要注意懸垂 else 問題,記住 else 是與 最接近的 if 比對。如
    int a = 2;
    if(a>0)
        if(a>10)
            System.out.println("a > 10");
    else 
        System.out.println("a > 0 && a <= 10");           
    我們要知道,最下面的 else 是與與它最近的 if 比對的

2.2 switch 語句

Java 中的 switch 語句和 C 語言中的幾乎一樣,大家如果不太熟悉 switch 以及該章所講解的一些邏輯結構可以去看看我寫的

C語言三大語句注意事項

。但是既然不是完全一樣,那哪裡有差別呢?

在 Java 中,switch(表達式) 中的表達式是有類型限制的。

它隻能使用:整數(隻包括 byte、short、int)、字元(char)、字元串(String)、枚舉類型

3. 循環結構

3.1 while 循環

舒服,Java 的 while 循環和 C 語言也是極其類似,隻有一個小的差異

while (表達式) 中的表達式必須是布爾值

3.2 break

break 的功能是:讓最靠近包裹它的整個循環提前結束。這也是和 C 語言是一樣的

3.3 continue

continue 的功能是:跳過本次循環,立即進入下次循環。這也是和 C 語言是一樣的

3.4 for 循環

Java 中的 for 循環和 C 語言中的也很類似,隻有一個差異

for(表達式1;表達式2;表達式3) 中的表達式2是循環的判斷條件,要使用布爾值

3.5 do while 循環

Java 中的 do while 循環也是和 C 語言很類似,隻有一個差異

while 中的循環條件隻能是布爾值

但是一般不推薦使用,因為它至少會執行一次循環,不注意可能會犯錯

二、輸入輸出方式

1. 輸出到控制台

  1. 基本文法
    System.out.println(msg);        // 輸出一個字元串,自帶換行
    System.out.print(msg);            // 輸出一個字元串,不帶換行
    System.out.printf(format,msg);    // 格式化輸出,括号内内容類似于 C 語言的 printf           
  2. 代碼示例
    int a = 10;
    System.out.println(a);            // 輸出 a,自帶換行
    System.out.print(a);            // 輸出 a,不帶換行
    System.out.printf("%d\n",a);    // 格式化輸出,括号内内容類似于 C 語言的 printf           
  3. 格式化輸出表(随用随查)
    轉換符 類型 例子 輸出結果
    d 十進制整數 ("%d",100) 100
    x 十六進制整數 ("%x",100) 64
    o 八進制整數 ("%o",100) 144
    f 定點浮點數 ("%f",100f)
    e 指數浮點數 ("%e",100f)
    g 通用浮點數 ("%g",100f)
    a 十六進制浮點數 ("%a",100) 0x1.9p6
    s 字元串 ("%s",100)
    c 字元 ("%d",'1') 1
    b 布爾值 ("%b",100) true
    h 散列碼 ("%h",100)
    % 百分号 ("%.2f%%",2/7f) 0.29%

2. 從鍵盤輸入

  1. 讀入一個字元(不推薦使用)
    直接使用

    System.in.read()

    可以讀入一個字元,但是需要搭配異常處理。如果不搭配異常,如下面代碼就會編譯出錯
    public static void main(String[] args) {
            System.out.print("Enter a char:");
            char i = (char)System.in.read();
            System.out.println("The char is :" + i);
        }           
    我們需要将滑鼠放到 read 上面,再按住

    Alt + Enter

    鍵就會出現
    【Java 基礎文法】邏輯控制
    再點選第一個或者第二個就不會報錯了。這裡其實是處理了異常,但是一個簡單的讀入字元就要這麼複雜是以不推薦使用。
  2. 使用 Scanner 讀取字元/字元串/整數/浮點數/布爾值
    1. 首先需要導入 util 包

      import java.util.Scanner;

      ,在 IDEA 中,其可以通過輸入 Scanner 後直接回車快速導入
    2. 然後再構造一個 Scanner 對象并與”标準輸入流“ System.in 關聯:

      Scanner 對象名 = new Scanner(System.in);

    3. 再就可以通過 Scanner 類的各種方法實作輸入操作了
      import java.util.Scanner;
      
      public class TestDemo {
          public static void main(String[] args) {
              Scanner in = new Scanner(System.in);
              
              int a = in.nextInt();            //讀入一個整數
              double b = in.nextDouble();        //讀入一個浮點數
              boolean c = in.nextBoolean();    //讀入一個布爾值
              String s = in.next();            //讀入一個字元串
          }
      }           
      但是要注意,上述讀入字元串是按空白符當作分隔符的,故隻能讀入第一個空格之前的字元。如果想要讀取該行的所有字元(包含空格),應該使用
      String s = in.nextLine();           
      但是使用這個方法還是有很大的缺陷,如果這行代碼上面還有其他讀入的語句,可能這行代碼就不會實行。因為上一行的回車可能被它讀入,直接這行結束。是以,隻能将其放在讀入代碼的第一個或者在它前面加一個
      in.nextLine();           
      來讀取掉之前的回車。
  3. 我們知道在 C 語言中可以寫類似于這樣的代碼輸入多組資料
    int a;
    while(scanf("%d",&a) != EOF)
    {
        // 内容
    }           
    在 C++ 中我們也可以寫類似于這樣的代碼輸入多組資料
    int a;
    while(cin>>a)
    {
        // 内容
    }           
    那麼在 Java 中怎麼做呢?代碼如下
    Scanner in = new Scanner(System.in);
    while(in.hasNextInt()){
        int a = in.nextInt();
        // 内容
    }           
    并且在 IDEA 上我們可以手動輸入

    Ctrl + D

    結束,在 Windows 的 cmd 上 我們手動輸入

    Ctrl + Z

    結束,在 Linux 或 Mac 上,輸入

    Ctrl + D

    結束

三、猜數字遊戲

學 C 語言的時候我們可能都接觸過随機數的生成,或者直接寫一個猜随機數的遊戲。那麼使用 Java 該怎麼寫呢?

  1. 首先我們要知道在 Java 中随機數是怎麼生成的。
    1. import java.util.Random;

      ,在 IDEA 中,其可以通過輸入 Random 後直接回車快速導入
    2. 然後通過 Random 類中的方法生成我們想要的,如
      import java.util.Random;
      
      public class TestDemo {
          public static void main(String[] args) {
              Random random = new random();    // 預設随機種子是系統時間
              int rand = random.nextInt(bound:100) + 1;
              // random.nextInt(bound:100) 是生成[0,100)間的随機整數
          }
      }           
  2. 接下來就是很簡單了,隻要我們輸入的數字與随機數字進行一下比較。直到判斷正确再退出就可。故最終的代碼是
    public class TestDemo {
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            Random random = new Random();
            int rand = random.nextInt(100) + 1;
            while (true){
                System.out.print("請輸入你所猜測的數字:");
                int num = scanner.nextInt();
                if(num == rand){
                    System.out.println("恭喜你,猜對了!");
                    break;
                }else if(num < rand){
                    System.out.println("很遺憾,你猜的數字小了!");
                }else{
                    System.out.println("很遺憾,你猜的數字大了!");
                }
            }
        }
    }           

四、總結

這章講了 Java 的邏輯控制結構,包含了順序結構、順序結構和分支結構。還講了 Java 的輸入輸出方式。并在最後用 Java 程式寫了一個簡單的猜數字遊戲。我們可以發現,很多都是和 C 語言類似的,這也降低了我們學習的難度。

下一章則是關于方法學習的介紹,這也是類似于 C 語言函數的東東。希望大家喜歡我的文章。自己也要繼續加油,奧裡給!

【Java 基礎文法】邏輯控制