1.使用從控制台讀取System.in

在前面的課程中,我們熟悉了在屏幕上顯示信息的命令。為此,我們使用了System.out對象及其print()方法println()。簡單方便。

但是,正如您可能已經猜到的那樣,在屏幕上顯示信息對我們來說還不夠。大多數程序的目的是為用戶做一些有用的事情。這意味著用戶經常需要能夠從鍵盤輸入數據。

就像輸出的情況一樣,我們也有一個特殊的數據輸入對象 — System.in. 但是,對我們來說不幸的是,它並不像我們想要的那樣方便。它讓我們一次從鍵盤讀取一個字符的數據。

為了改進這一點,我們將使用另一個類,當與System.in對象配對時,它將為我們提供我們需要的一切。很長一段時間以來,Java 都有適合各種場合的類。我們現在將了解其中的一個。


2.Scanner

Scanner(全稱:)java.util.Scanner可以從不同的來源讀取數據,例如控制台、文件和互聯網。如果我們希望它從鍵盤讀取數據,那麼我們必須將對System.in像作為參數傳入,該對象將用作數據源。然後 Scanner 對象將弄清楚如何處理它。

使用對像從鍵盤讀取Scanner看起來像這樣:

代碼 解釋
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
我們創建一個Scanner對象。
我們從鍵盤上讀取一行文本。
我們從鍵盤上 讀取了一個數字。

看起來很簡單,但真的有那麼簡單嗎?

我想你一定有一堆問題,現在我們來一一解答。

但首先,讓我們演示一個使用該類的完整程序示例Scanner

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3.創建Scanner對象

第一個問題是這條線是什麼Scanner console = new Scanner (System.in);

這條線可能令人困惑,但你會一直看到類似的東西。所以我們認為解釋這裡發生的事情很重要。

回想一下我們通常如何用文本創建變量:

String str = "text";
聲明和初始化字符串變量

首先,我們寫入變量的類型 ( String),然後是它的名稱 ( str),最後,在等號之後,我們寫入值。

我們的迷惑線其實是一樣的:

Scanner console = new Scanner(System.in);
聲明和初始化Scanner變量

等號左邊的所有內容都是console類型為 的變量聲明Scanner。您可以改為調用它s orscanner甚至keyboard. 然後代碼將如下所示:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

我認為這讓一切都變得更加清晰。

但是等號右邊的代碼稍微複雜一點。我現在指的是new Scanner(System.in); 也就是說,這裡也沒有發生任何超自然現象。

在這段代碼中,我們告訴 Java 機器:創建一個new類型為 的新對象(關鍵字) ,將對像作為新創建對象的數據源Scanner 傳入。System.inScanner

執行完這一整行後,我們將有一個Scanner名為的變量console ,我們的程序將使用該變量從鍵盤讀取數據。


4. 方法列表

在上面的示例中,我們的Scanner console變量存儲了對對象的引用Scanner

要在變量引用的對像上調用方法,請在變量名稱後寫一個句點,然後是方法名稱和任何參數。命令的一般外觀如下:

variable.method(arguments);
在變量引用的對像上調用方法

例子:

System.out.println("Hello");
System.out.println(1);

如果您不打算將參數傳遞給函數,那麼您只需編寫空括號:

variable.method();
在不傳遞參數的情況下調用方法

例子:

System.out.println();

5.控制台輸入

當我們有一個Scanner對象時,很容易從鍵盤獲取數據。

要從鍵盤讀取一行,你需要這個命令:

String str = console.nextLine();

當程序執行到這一行時,會暫停,等待用戶輸入數據並回車。然後用戶輸入的所有內容都存儲在變量中str

要從鍵盤讀取一個數字,你需要這個命令:

int number = console.nextInt();

這裡的一切都像前面的命令。當程序執行到這一行時,會暫停,等待用戶輸入數據並回車。之後,用戶輸入的所有內容都將轉換為數字並存儲在number變量中。

如果用戶輸入的數據無法轉換為整數,程序將產生錯誤並退出。

要從鍵盤讀取小數,你需要這個命令:

double number = console.nextDouble();

該語句與方法中的語句非常相似nextInt(),只是它檢查輸入的數據是否可以轉換為數字double

從鍵盤讀取兩個數字並在屏幕上顯示它們的和的程序示例:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
筆記

用戶可以在一行中輸入多個數字,用空格分隔:類的方法Scanner知道如何處理這個。也就是說,程序僅在用戶按下 後才讀取數字Enter



6.Scanner類的其他方法

順便說一句,上面的方法並不是該類Scanner必須提供的全部。完整的方法列表如下所示:

方法 描述
nextByte()
讀取數據並將其轉換為byte
nextShort()
讀取數據並將其轉換為short
nextInt()
讀取數據並將其轉換為int
nextLong()
讀取數據並將其轉換為long
nextFloat()
讀取數據並將其轉換為float
nextDouble()
讀取數據並將其轉換為double
nextBoolean()
讀取數據並將其轉換為boolean
next()
讀取一個“令牌”。令牌由空格或按回車鍵分隔
nextLine()
讀取整行

還有一些方法可以讓您檢查輸入中的下一個標記,而無需實際獲取它(以便知道使用哪種方法來讀取它)。

方法 描述
hasNextByte()
有嗎byte?可以將輸入轉換為byte?
hasNextShort()
有嗎short?可以將輸入轉換為short?
hasNextInt()
有嗎int?可以將輸入轉換為int?
hasNextLong()
有嗎long?可以將輸入轉換為long?
hasNextFloat()
有嗎float?可以將輸入轉換為float?
hasNextDouble()
有嗎double?可以將輸入轉換為double?
hasNextBoolean()
有嗎boolean?可以將輸入轉換為boolean?
hasNext()
還有其他令牌嗎?
hasNextLine()
還有另一條線嗎?

7.從字符串中讀取數據

我們之前提到過該類Scanner可以從各種來源讀取數據。其中一個來源是一串文本

它看起來像這樣:

String str = "text";
Scanner scanner = new Scanner(str);

創建Scanner對象時,我們傳入字符串str而不是System.in對象。現在scanner對象將從字符串中讀取數據。例子:

程序代碼: 解釋:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// 一個 == 10; 
// b == 20; 
屏幕輸出將是:30