讓我們看看從用戶得到輸入的三種不同方法。第一種方法是使用Console類,它是通過系統對象訪問。Console類的ReadLine()方法從用戶命令行得到輸入,并返回一個字符串給調用程序。使用這種方法做的好處是,你不需要導入任何東西,因為系統類是無處不在的可用的Java.lang包的一部分。使用Console方法的缺點是,它通常不會在像Ecliple和NetBeans的IDE中工作。Console只能保證你直接在JVM上運行Java代碼時工作,否則會被警告。


    System.console()。readLine(); //輸入,返回一個字符串


    獲取用戶輸入的第二種方法是使用Scanner類,這個類在Java.io包中。使用Scanner類通常是一個兩步的過程,盡管你可以隱藏起來并把它們推成一個,長的,串起的方法來調用:


    Scanner scanner =  new Scanner(System.in);


    String input   =  scanner.next();


    /* or String input   =  (new Scanner(System.in))。next(); */


    與Console類不同,使用Scanner類在命令行和標準的IDE,如Eclipse和NetBeans,都能同樣很好的工作。


    我們將看的是第三種獲取用戶輸入的方法,也是最有趣的。JOptionPane,是Javax.swing家族組件的一部分,實際上是拋出了一個可愛的小輸入對話框,要求用戶輸入。然后用戶的輸入,作為一個String會返回給調用程序。


    JOptionPane.showInputDialog(“Rock, paper or scissors?”);


    現在開始來看看我們,相當初期的Game.Java類,簡單地打印出一些示例文本描述石頭-剪刀-布游戲:


    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處理用戶輸入


    為了完成從用戶輸入的任務,我們將要在同一個文件中編寫一些代碼。在Game類結束的右括號后,為一個非公共類添加另一個類聲明,命名為ConsoleGame,并添加一個主方法。


    class ConsoleGame {


    public static void main (String args[]) {


    }


    }

 在主方法體內,提示用戶輸入,剪刀,石頭或者布。然后利用系統的Console類來獲取用戶輸入,然后回顯返回給用戶告訴他們選了什么。這里只有三行代碼。


    System.out.println(“Rock, Paper or Scissors?”);


    String input   =  System.console()。readLine();


    System.out.println(“You chose: ” + input);


    當你完成后,整個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!”);


    }


    }


    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文件。當你這樣做時,請注意,編譯成功后,一個新命名為ConsoleGame.class的文件將和Game.class文件一起出現在JDK的bin目錄中。


    當Game.Java文件被編譯成功時,你現在可以在命令行中使用標準的語法運行ConsoleGame類。下面的結果是我遇到的,當我運行該程序并提供輸入時:


    C:\_jdk1.7\bin>Javac Game.Java


    C:\_jdk1.7\bin>Java  ConsoleGame


    Rock, Paper or Scissors?


    RoCK


    You chose: RoCK


    一個Java文件中的多個類

在一個Java文件里面,向一個任務里面添加第二或第三個類不是很頻繁,但一個靈巧的小把戲是被允許的,唯一需要注意的是每個Java文件只能有一個公共類,并且公共類必須完全匹配包含Java源文件的名稱。但在那之后,在Java源文件中你可以有許多非公共類。事實上,我要添加一個叫ScannerGame的非公共類。


    處理用戶輸入的Scanner類


    使用Scanner類,存在于Java.util包當中,相對直接了當。一個實例通過new關鍵字創建,同時傳遞InputStream類型的參數System.in給構造函數。在你處理Sacnner類的一個實例時,簡單地調用next()方法可以通過控制臺窗口中抓取文本,將用戶鍵入的回車之前的任何文本作為一個字符串返回給程序。在這里,我們把數據保存在一個String變量并且簡單地反射回給用戶:


    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控制臺編譯時和運行程序的交互。請記住,因為文件名叫Game.Java,并且Game.Java已經被編譯,而是ScannerGame類在運行。


    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控制臺的交互是很繁瑣而且不直觀的。這就是為什么我總是喜歡用Swing包中的一個叫做JOptionPane組件。通過簡單地調用靜態方法showInputDialog,并提供一些輸入文本作為參數,展示給用戶圖形化的文本框并提示要求輸入。一旦他們提供輸入,然后點擊“OK”按鈕,返回文本會被作為一個字符串返回給調用程序。


    下面是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);


    }


    }


    當類被編譯并運行時,會出現一個簡單的對話框,要求輸入,在控制臺中回顯給用戶。這不僅簡單和直接,而且它也是一個與用戶進行交互更直觀的方式。