1.使用從控制台讀取System.in
在前面的課程中,我們熟悉了在屏幕上顯示信息的命令。為此,我們使用了System.out
對象及其print()
方法println()
。簡單方便。
但是,正如您可能已經猜到的那樣,在屏幕上顯示信息對我們來說還不夠。大多數程序的目的是為用戶做一些有用的事情。這意味著用戶經常需要能夠從鍵盤輸入數據。
就像輸出的情況一樣,我們也有一個特殊的數據輸入對象 — System.in
. 但是,對我們來說不幸的是,它並不像我們想要的那樣方便。它讓我們一次從鍵盤讀取一個字符的數據。
為了改進這一點,我們將使用另一個類,當與System.in
對象配對時,它將為我們提供我們需要的一切。很長一段時間以來,Java 都有適合各種場合的類。我們現在將了解其中的一個。
2.Scanner
類
類Scanner
(全稱:)java.util.Scanner
可以從不同的來源讀取數據,例如控制台、文件和互聯網。如果我們希望它從鍵盤讀取數據,那麼我們必須將對System.in
像作為參數傳入,該對象將用作數據源。然後 Scanner 對象將弄清楚如何處理它。
使用對像從鍵盤讀取Scanner
看起來像這樣:
代碼 | 解釋 |
---|---|
|
我們創建一個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);
等號左邊的所有內容都是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.in
Scanner
執行完這一整行後,我們將有一個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
必須提供的全部。完整的方法列表如下所示:
方法 | 描述 |
---|---|
|
讀取數據並將其轉換為byte |
|
讀取數據並將其轉換為short |
|
讀取數據並將其轉換為int |
|
讀取數據並將其轉換為long |
|
讀取數據並將其轉換為float |
|
讀取數據並將其轉換為double |
|
讀取數據並將其轉換為boolean |
|
讀取一個“令牌”。令牌由空格或按回車鍵分隔 |
|
讀取整行 |
還有一些方法可以讓您檢查輸入中的下一個標記,而無需實際獲取它(以便知道使用哪種方法來讀取它)。
方法 | 描述 |
---|---|
|
有嗎byte ?可以將輸入轉換為byte ? |
|
有嗎short ?可以將輸入轉換為short ? |
|
有嗎int ?可以將輸入轉換為int ? |
|
有嗎long ?可以將輸入轉換為long ? |
|
有嗎float ?可以將輸入轉換為float ? |
|
有嗎double ?可以將輸入轉換為double ? |
|
有嗎boolean ?可以將輸入轉換為boolean ? |
|
還有其他令牌嗎? |
|
還有另一條線嗎? |
7.從字符串中讀取數據
我們之前提到過該類Scanner
可以從各種來源讀取數據。其中一個來源是一串文本。
它看起來像這樣:
String str = "text";
Scanner scanner = new Scanner(str);
創建Scanner
對象時,我們傳入字符串str
而不是System.in
對象。現在scanner
對象將從字符串中讀取數據。例子:
程序代碼: | 解釋: |
---|---|
|
// 一個 == 10;
// b == 20;
屏幕輸出將是: |
GO TO FULL VERSION