让我们看看从用户得到输入的三种不同方法。第一种方法是使用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);
}
}
当类被编译并运行时,会出现一个简单的对话框,要求输入,在控制台中回显给用户。这不仅简单和直接,而且它也是一个与用户进行交互更直观的方式。