讓我們看看從用戶得到輸入的三種不同方法。第一種方法是使用Console類,它是通過(guò)系統(tǒng)對(duì)象訪問(wèn)。Console類的ReadLine()方法從用戶命令行得到輸入,并返回一個(gè)字符串給調(diào)用程序。使用這種方法做的好處是,你不需要導(dǎo)入任何東西,因?yàn)橄到y(tǒng)類是無(wú)處不在的可用的Java.lang包的一部分。使用Console方法的缺點(diǎn)是,它通常不會(huì)在像Ecliple和NetBeans的IDE中工作。Console只能保證你直接在JVM上運(yùn)行Java代碼時(shí)工作,否則會(huì)被警告。
System.console()。readLine(); //輸入,返回一個(gè)字符串
獲取用戶輸入的第二種方法是使用Scanner類,這個(gè)類在Java.io包中。使用Scanner類通常是一個(gè)兩步的過(guò)程,盡管你可以隱藏起來(lái)并把它們推成一個(gè),長(zhǎng)的,串起的方法來(lái)調(diào)用:
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
/* or String input = (new Scanner(System.in))。next(); */
與Console類不同,使用Scanner類在命令行和標(biāo)準(zhǔn)的IDE,如Eclipse和NetBeans,都能同樣很好的工作。
我們將看的是第三種獲取用戶輸入的方法,也是最有趣的。JOptionPane,是Javax.swing家族組件的一部分,實(shí)際上是拋出了一個(gè)可愛(ài)的小輸入對(duì)話框,要求用戶輸入。然后用戶的輸入,作為一個(gè)String會(huì)返回給調(diào)用程序。
JOptionPane.showInputDialog(“Rock, paper or scissors?”);
現(xiàn)在開(kāi)始來(lái)看看我們,相當(dāng)初期的Game.Java類,簡(jiǎn)單地打印出一些示例文本描述石頭-剪刀-布游戲:
Java類:Game.Java
public class Game {
public static void main (String args[]) {
System.out.println(“If I choose Rock,”);
System.out.println(“And you choose Scissors,”);
System.out.println(“Then I win and you lose!”);
}
}
用System.console處理用戶輸入
為了完成從用戶輸入的任務(wù),我們將要在同一個(gè)文件中編寫一些代碼。在Game類結(jié)束的右括號(hào)后,為一個(gè)非公共類添加另一個(gè)類聲明,命名為ConsoleGame,并添加一個(gè)主方法。
class ConsoleGame {
public static void main (String args[]) {
}
}
在主方法體內(nèi),提示用戶輸入,剪刀,石頭或者布。然后利用系統(tǒng)的Console類來(lái)獲取用戶輸入,然后回顯返回給用戶告訴他們選了什么。這里只有三行代碼。
System.out.println(“Rock, Paper or Scissors?”);
String input = System.console()。readLine();
System.out.println(“You chose: ” + input);
當(dāng)你完成后,整個(gè)Game.Java文件看起來(lái)像這樣:
public class Game {
public static void main (String args[]) {
System.out.println(“If I choose Rock,”);
System.out.println(“And you choose Scissors,”);
System.out.println(“Then I win and you lose!”);
}
}
class ConsoleGame {
public static void main (String args[]) {
System.out.println(“Rock, Paper or Scissors?”);
String input = System.console()。readLine();
System.out.println(“You chose: ” + input);
}
}
/* WARNING: The Console may not work in IDEs such as Eclipse */
使用Javac工具編譯Game.Java文件。當(dāng)你這樣做時(shí),請(qǐng)注意,編譯成功后,一個(gè)新命名為ConsoleGame.class的文件將和Game.class文件一起出現(xiàn)在JDK的bin目錄中。
當(dāng)Game.Java文件被編譯成功時(shí),你現(xiàn)在可以在命令行中使用標(biāo)準(zhǔn)的語(yǔ)法運(yùn)行ConsoleGame類。下面的結(jié)果是我遇到的,當(dāng)我運(yùn)行該程序并提供輸入時(shí):
C:\_jdk1.7\bin>Javac Game.Java
C:\_jdk1.7\bin>Java ConsoleGame
Rock, Paper or Scissors?
RoCK
You chose: RoCK
一個(gè)Java文件中的多個(gè)類
在一個(gè)Java文件里面,向一個(gè)任務(wù)里面添加第二或第三個(gè)類不是很頻繁,但一個(gè)靈巧的小把戲是被允許的,唯一需要注意的是每個(gè)Java文件只能有一個(gè)公共類,并且公共類必須完全匹配包含Java源文件的名稱。但在那之后,在Java源文件中你可以有許多非公共類。事實(shí)上,我要添加一個(gè)叫ScannerGame的非公共類。
處理用戶輸入的Scanner類
使用Scanner類,存在于Java.util包當(dāng)中,相對(duì)直接了當(dāng)。一個(gè)實(shí)例通過(guò)new關(guān)鍵字創(chuàng)建,同時(shí)傳遞InputStream類型的參數(shù)System.in給構(gòu)造函數(shù)。在你處理Sacnner類的一個(gè)實(shí)例時(shí),簡(jiǎn)單地調(diào)用next()方法可以通過(guò)控制臺(tái)窗口中抓取文本,將用戶鍵入的回車之前的任何文本作為一個(gè)字符串返回給程序。在這里,我們把數(shù)據(jù)保存在一個(gè)String變量并且簡(jiǎn)單地反射回給用戶:
class ScannerGame {
public static void main (String args[]) {
System.out.println(“Rock, Paper or Scissors?”);
Java.util.Scanner scanner = new Java.util.Scanner(System.in);
String input = scanner.next();
System.out.println(“You chose: ” + input);
}
}
這是我在Java控制臺(tái)編譯時(shí)和運(yùn)行程序的交互。請(qǐng)記住,因?yàn)槲募蠫ame.Java,并且Game.Java已經(jīng)被編譯,而是ScannerGame類在運(yùn)行。
C:\_jdk1.7\bin>Javac Game.Java
C:\_jdk1.7\bin>Java ScannerGame
Will it be Rock, Paper or Scissors?
PaPER
This time you chose: PaPER
處理用戶輸入的Swing組件
與Java控制臺(tái)的交互是很繁瑣而且不直觀的。這就是為什么我總是喜歡用Swing包中的一個(gè)叫做JOptionPane組件。通過(guò)簡(jiǎn)單地調(diào)用靜態(tài)方法showInputDialog,并提供一些輸入文本作為參數(shù),展示給用戶圖形化的文本框并提示要求輸入。一旦他們提供輸入,然后點(diǎn)擊“OK”按鈕,返回文本會(huì)被作為一個(gè)字符串返回給調(diào)用程序。
下面是SwingGame類,它是程序中被編碼好的。
class SwingGame {
public static void main(String args[]) {
String input = Javax.swing.JOptionPane.showInputDialog(“What will it be this time?”);
System.out.println(“This time you said ” + input);
}
}
當(dāng)類被編譯并運(yùn)行時(shí),會(huì)出現(xiàn)一個(gè)簡(jiǎn)單的對(duì)話框,要求輸入,在控制臺(tái)中回顯給用戶。這不僅簡(jiǎn)單和直接,而且它也是一個(gè)與用戶進(jìn)行交互更直觀的方式。