如何处理独立的Java程序中的输入问题

日期: 2012-10-17 作者:Cameron McKenzie翻译:张宣彬 来源:TechTarget中国 英文

让我们看看从用户得到输入的三种不同方法。第一种方法是使用Console类,它是通过系统对象访问。Console类的ReadLine()方法从用户命令行得到输入,并返回一个字符串给调用程序。使用这种方法做的好处是,你不需要导入任何东西,因为系统类是无处不在的可用的java.lang包的一部分。

使用Console方法的缺点是,它通常不会在像Ecliple和NetBeans的IDE中工作。Console只能保证你直接在JVM上运行Java代码时工作,否则会被警告。 System.console().readLine(); //输入,返回一个字符串   获取用户输入的第二种方法是使用Scan……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

让我们看看从用户得到输入的三种不同方法。第一种方法是使用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.7bin>javac Game.java
C:_jdk1.7bin>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.7bin>javac Game.java
C:_jdk1.7bin>java ScannerGame
Will it be Rock, Paper or Scissors?
PaPER
This time you chose: PaPER

  处理用户输入的Swing组件

  与Java控制台的交互是很繁琐而且不直观的。这就是为什么我总是喜欢用Swing包中的一个叫做JOptionPane组件。通过简单地调用静态方法showInputDialog,并提供一些输入文本作为参数,展示给用户图形化的文本框并提示要求输入。一旦他们提供输入,然后点击“OK”按钮,返回文本会被作为一个字符串返回给调用程序。

如何处理独立的Java程序中的输入问题

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

  当类被编译并运行时,会出现一个简单的对话框,要求输入,在控制台中回显给用户。这不仅简单和直接,而且它也是一个与用户进行交互更直观的方式。

相关推荐