Day11-Scanner

1hahahahahahahaha發表於2024-10-07

Day11-Scanner

Scanner介紹

Scanner 物件:

之前我們學的基本語法中我們並沒有實現程式和人的互動,但是 Java 給我們提供了這樣一個工具類,我們可以獲取使用者的輸入。

java.util.Scanner 是 Java5 的新特徵,我們可以透過 Scanner 類來獲取使用者的輸入。

基本語法:

Scanner s = new Scanner(System.in);

透過 Scanner 類的 next()與 nextLine()方法獲取輸入的字串:在讀取前我們一般需要使用 hasNext()與 hasNextLine()判斷是否還有輸入的資料。

java.util.Scanner 的解讀:

“java.util.Scanner” 是 Java 程式語言中的一個類。

“java.util” 是 Java 標準庫中的一個包(package)名稱,這個包中包含了很多實用的工具(utility)類和介面。

“Scanner” 是其中的一個類,它主要用於從標準輸入(通常是鍵盤輸入)、檔案等來源中讀取資料。它提供了方便的方法來解析各種基本資料型別和字串。

next()與 nextLine()方法分別的用法

一、next()方法

  • next()方法會從輸入流中讀取下一個單詞(以空白字元分隔)。

  • 它會在遇到空白字元(如空格、製表符、換行符等)時停止讀取,並返回當前讀取到的內容。

  • 假設使用者輸入 “hello world”,next()方法只會讀取到 “hello”,因為它在遇到第一個空白字元時就停止了讀取。

    //建立一個掃描器物件,用於接收鍵盤資料
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("使用next方法接收:");
    
            //判斷使用者有沒有輸出字串
            if(scanner.hasNext()){
                //使用next方法接收——接收單個單詞關閉
                String str=scanner.next();    //程式會等到使用者輸入
                System.out.println("輸入的內容為:"+str);
            }
            //屬於IO流的類,用完就關閉,否則一直佔用資源!!!!!!!!!!!!
            scanner.close();//關閉
    

    輸入Hello world時,只輸出一個Hello

    使用next方法接收:
    Hello world
    輸入的內容為:Hello
    

二、nextLine()方法

  • nextLine()方法會讀取輸入流中的一整行內容,包括空白字元。
  • 它會讀取到當前行的末尾(換行符處),並返回包括換行符之前的所有字元。
 Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextline方法接收:");

        if(scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("輸出的結果為:"+str);
        }
     scanner.close();

hasNext()

在 Java 中,Scanner類的hasNext()方法用於判斷輸入流中是否還有下一個輸入項(token)。

具體解釋如下:

一、返回值及用途

  1. 返回值型別:這個方法返回一個布林值。如果輸入流中還有下一個輸入項可讀取,它就返回true;如果沒有更多的輸入項可讀取,它就返回false
  2. 常見用途:通常在一個迴圈中使用這個方法來不斷檢查是否有更多的輸入,以便決定是否繼續讀取輸入。

二、輸入項的概念

  1. 定義:輸入項是指透過輸入流提供的、以分隔符(如空格、換行符等)分隔的一塊資料。具體的分隔規則取決於Scanner的構造方式和預設的分隔模式。
  2. 示例:如果使用者在控制檯輸入 “hello world”,這裡面的 “hello” 和 “world” 可以分別被看作兩個輸入項。如果輸入的是一個整數,那麼這個整數就是一個輸入項。

三、與其他方法配合使用

  1. next()方法配合:通常在使用next()方法讀取輸入項之前,先使用hasNext()方法進行判斷,以確保不會在沒有輸入項可讀取時呼叫next()方法而導致異常。

遇見某一個類,選中,按住Ctrl鍵,單擊滑鼠,就進入了類的原始碼

實際應用:判斷輸入的是不是整數/小數

Scanner scanner = new Scanner(System.in);

        //從鍵盤接收資料
        int i1=0;
        float i2=0.0f;
        System.out.println("請輸入整數:");
        if(scanner.hasNextInt()){
           i1 = scanner.nextInt();
            System.out.println("輸入的整數是:"+i1);
        }else {System.out.println("你輸入的不是整數");}


        System.out.println("請輸入小數:");
        if(scanner.hasNextFloat()){
            i2 = scanner.nextFloat();
            System.out.println("輸入的小數是:"+i2);
        }else {System.out.println("你輸入的不是小數");}



        scanner.close();

實際應用:將輸入的資料求和、求平均值

//我們可以輸入多個數字,並求其總和與平均數。每輸入一個數字用回車確認。透過輸入非數字來結束輸入並輸出執行結果。

        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入:");
        //和
        double sum=0;
        //有多少個數
        int num=0;

        //透過迴圈判斷是否有數字,並進行求和和數量統計
        while(scanner.hasNextDouble()){
             sum+=scanner.nextDouble();
            num=num+1;//num++
            System.out.println("你輸入了第"+num+"個數,當前的和是"+sum);


        }
        System.out.println(num+"個數的和是"+sum);
        System.out.println(num+"個數的平均數:"+(sum/num));
        scanner.close();