亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Java Scanner 類

一直以來,我們都使用System.out.println()方法向屏幕打印內容,那么如何接收輸入的內容呢?本小節所學習的Scanner類就可以實現對輸入內容的接收。在本小節,我們將學習Scanner類的定義,如何使用Scanner類以及其常用方法,在學完這些基礎知識后,我們會在最后學習一個比較有趣的實例程序。

1. 定義

Scanner是一個簡單的文本掃描器,可以解析基礎數據類型字符串

它位于java.util包下,因此如果要使用此類,必須使用import語句導入:

import java.util.Scanner;

2. Scanner 對象創建

想要使用Scanner類就要了解如何創建對象,我們可以使用如下代碼創建一個掃描器對象:

Scanner scanner = new Scanner(System.in);

構造方法的參數System.in表示允許用戶從系統中讀取內容。本小節,我們的示例代碼中都將使用這個構造方法。

TipsSystem.in是一個InputStream類型,Scanner類還有很多接收其他類型的構造方法。這里不詳細介紹。

3. 常用方法

3.1 next()及其同伴方法

想要獲取用戶的輸入,只有對象是不行的,還要配合它的實例方法。此時配合Scanner類中的next()方法及其同伴方法可以獲取指定類型的輸入。

3.1.1 next() 方法

next()方法的返回值是字符串類型,可以使用此方法,將用戶輸入的內容掃描為字符串。我們來看一個示例,獲取并打印用戶輸入的內容:

import java.util.Scanner;

public class ScannerDemo1 {
    public static void main(String[] args) {
        // 創建掃描器對象
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入一段內容,輸入回車結束:");
        // 可以將用戶輸入的內容掃描為字符串
        String str = scanner.next();
        // 打印輸出
        System.out.println("您輸入的內容為:" + str);
        // 關閉掃描器
        scanner.close();
    }
}

在代碼中我們注意到,在代碼塊的最后調用了close()方法,這個方法用于關閉當前掃描器,就和電腦的開關機一樣,使用電腦前要開機,而當用不到的時候最好關掉。

編譯執行代碼,屏幕將會提示:

請輸入一段內容,輸入回車結束:

接下來我們按照提示輸入內容,然后輸入回車結束輸入:

3.1.2 同伴方法

那什么是同伴方法呢?這里的同伴方法指的是Scanner類中以next單詞開頭的方法。我們舉例來看幾個同伴方法及其作用:

  • nextLine() :返回輸入回車之前的所有字符;
  • nextInt() :將輸入內容掃描為int類型;
  • nextFloat() :將輸入內容掃描為float類型。

這里的nextLine() 方法也可以獲取字符串。我們來看一下它和next()方法的差異:

next()方法只有掃描到有效字符后才會結束輸入;而nextLine()方法可以直接使用回車結束輸入。

另外,next()方法會自動去掉空白(例如回車、空格等),也不能得到帶有空格的字符串;nextLine()方法可以得到空白和帶有空格的字符串。

我們再來看一個示例,獲取用戶輸入的姓名、年齡和身高,并且打印輸出:

import java.util.Scanner;

public class ScannerDemo2 {
    public static void main(String[] args) {
        // 創建掃描器對象
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入您的姓名:");
        // 將第一行輸入掃描為字符串
        String name = scanner.nextLine();

        System.out.println("請輸入您的年齡:");
        // 將第二行輸入掃描為int類型
        int age = scanner.nextInt();

        System.out.println("請輸入您的身高:");
        // 將第三行輸入掃描為float類型
        float height = scanner.nextFloat();

        // 打印掃描器所掃描的值
        System.out.println("您的姓名為:" + name);
        System.out.println("您的年齡為:" + age);
        System.out.println("您的身高為:" + height);
        // 關閉掃描器
        scanner.close();
    }
}

編譯執行代碼,按照提示輸入對應內容,直到程序完整運行:

請輸入您的姓名:
三井 壽
請輸入您的年齡:
19
請輸入您的身高:
183
您的姓名為:三井 壽
您的年齡為:19
您的身高為:183

Tips:上面代碼中,如果使用next()方法代替nextLine()方法來獲取姓名字符串,是無法得到我們輸入的“三井 壽”這個字符串的,這是因為next()方法不能獲取帶有空格的字符串。

要特別注意的是:Scanner 類讀到的內容,只與輸入順序有關,和終端上顯示的順序無關,因此類似于下面的這種輸入,是讀不到空格的,執行代碼的流程如下:

3.2 hasNext()及其同伴方法

hasNext()方法的返回值是一個布爾類型,如果輸入中包含數據的輸入,則返回true。否則返回false。通常用來做輸入內容的驗證。

它的同伴方法是以hasNext單詞開頭的方法,諸如hasNextLine()、hasNextInt()等方法。例如,上面的代碼中,我們可以對應加入hasNext同伴方法結合條件判斷語句,來提升代碼的穩定性:

int age;
if (scanner.hasNextInt()) {
    age = scanner.nextInt();
} else {
    System.out.println("不是int類型");
}

float height;
if (scanner.hasNextFloat()) {
    height = scanner.nextFloat();
} else {
    System.out.println("不是float類型");
}

4. 實例

前面我們已經對Scanner類的基本用法有了一定的了解,下面我們來實現一個示例程序,這個程序用于估算一個人的體脂率,這里事先給出體脂率估算公式:

參數a = 腰圍(cm)×0.74   
參數b = 體重(kg)× 0.082 + 44.74
脂肪重量(kg)= a - b 
體脂率 =(脂肪重量 ÷ 體重)× 100%。 

從公式中我們可以看出,想要得到最終的體脂率,參數a(腰圍)和參數 b(體重)是需要用戶手動輸入的,公式部分只需要使用算數運算符實現即可。下面是程序代碼:

import java.util.Scanner;

public class GetBodyFat {
    public static void main(String[] args) {
        // 初始化腰圍
        float waistline = 0f;
        // 初始化體重
        float weight = 0f;
        // 聲明浮點型參數a,b,bodyFatWeight(脂肪重量)
        float a, b, bodyFatWeight;
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入您的腰圍(cm):");
        if (scanner.hasNextFloat()) {
            waistline = scanner.nextFloat();
        }
        System.out.println("請輸入您的體重(kg):");
        if (scanner.hasNextFloat()) {
            weight = scanner.nextFloat();
        }
        // 計算參數a  公式:參數a = 腰圍(cm)× 0.74
        a = waistline * 0.74f;
        // 計算參數b  公式:參數b = 體重(kg)× 0.082 + 44.74
        b = weight * 0.082f + 44.74f;
        // 計算脂肪重量
        bodyFatWeight = a - b;
        // 計算體脂率 =(脂肪重量 ÷ 體重)×100%。
        float result = bodyFatWeight / weight * 100;
        System.out.println("您的體脂率為" + result + "%");
    }
}

編譯運行代碼,按照提示輸入,將估算出你的體脂含量:

請輸入您的腰圍(cm):
70
請輸入您的體重(kg):
50
您的體脂率為5.919998%

執行代碼的流程如下:

5. 小結

本小節我們學習了 Java 的 Scanner類,它是位于java.util包下的一個工具類,我們知道了它是一個簡單的文本掃描器,可以解析基礎數據類型和字符串。我們也學會了如何使用Scanner類來獲取用戶的輸入,next()方法和nextLine()方法都可以掃描用戶輸入的字符串,要注意這兩個方法的區別。我們也在最后給出了一個計算體脂率的示例代碼,學習了Scanner類,你就可以實現比較有意思的一些小程序了。如果你想了解更多有關Scanner類的接口,也可翻閱官方文檔。