標籤:控制台 sys har ++ 方式 util val next 程式
Java程式開發過程中,需要從鍵盤擷取輸入值是常有的事,但Java它偏偏就沒有像c語言給我們提供的scanf(),C++給我們提供的cin()擷取鍵盤輸入值的現成函數!下面介紹三種解決方案:
方法一:從控制台接收一個字元,然後將其列印出來
import java.io.*;
public static void main(String [] args) throws IOException{ System.out.print("Enter a Char:"); char i = (char) System.in.read();
System.out.println("your char is :"+i); }
雖然此方式實現了從鍵盤擷取輸入的字元,但是System.out.read()只能針對一個字元的擷取,同時,擷取進來的變數的類型只能是char,當我們輸入一個數字,希望得到的也是一個整型變數的時候,我們還得修改其中的變數類型,這樣就顯得比較麻煩。
方法二:從控制台接收一個字串,然後將其列印出來。 在這個題目中,我們需要用到BufferedReader類和InputStreamReader類
import java.io.*;
public static void main(String [] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
System.out.println("Enter your value:"); str = br.readLine();
System.out.println("your value is :"+str); }
這樣就能擷取我們輸入的字串。
方法三:這種方法我認為是最簡單,最強大的,就是用Scanner類
import java.util.Scanner;
public static void main(String [] args) { Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的姓名:"); String name = sc.nextLine();
System.out.println("請輸入你的年齡:"); int age = sc.nextInt();
System.out.println("請輸入你的工資:"); float salary = sc.nextFloat();
System.out.println("你的資訊如下:"); System.out.println("姓名:"+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary); }
這段代碼已經表明,Scanner類不管是對於字串還是整型資料或者float類型的變數,只需做一點小小的改變,就能夠實現功能!無疑他是最強大的!
但是,在使用第三種輸入方法的時候有一個需要注意的地方,就是nextLine()函數,在io包中有一個和他功能一樣的函數我next()函數,他們的功能一樣,但是在實現上有什麼差別呢,請看下面代碼:
public static void main(String [] args) { Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的年齡:"); int age = sc.nextInt();
System.out.println("請輸入你的姓名:"); String name = sc.nextLine();
System.out.println("請輸入你的工資:"); float salary = sc.nextFloat();
System.out.println("你的資訊如下:"); System.out.println("姓名:"+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary); }
這段代碼和上邊第三種實現輸入方法給出的例子代 碼區別在於,這段代碼先執行nextInit()再執行nextLine(),而第三種方法的例子是先執行nextLine(),再執行 nextInit(),當你在運行著兩段代碼的時候你會發現第三種方法的例子可以實現正常的輸入,而這段代碼卻在輸入年齡,敲擊enter鍵後,跳過了輸 入姓名,直接到了輸入工資這裡,(可以自己運行代碼看看)這是為什麼呢?其實,在執行nextInit()函數之後,敲擊了enter斷行符號鍵,斷行符號符會被 nextLine()函數吸收,實際上是執行了nextLine()函數吸收了輸入的斷行符號符(並不是沒有執行nextLine函數),前面講到和 nextLine()功能一樣的函數next(),他們的區別就在於:next()函數不會接收斷行符號符和tab,或者空格鍵等,所以在使用 nextLine()函數的時候,要注意敲擊的斷行符號符有個被其吸收,導致程式出現BUG!!!
最後小小的總結一下next()和nextLine()的區別:
在java中,next()方法是不接收空格的,在接收到有效資料前,所有的空格或者tab鍵等輸入被忽略,若有有效資料,則遇到這些鍵退出。nextLine()可以接收空格或者tab鍵,其輸入應該以enter鍵結束。
JAVA中擷取鍵盤輸入的方法總結