让我们看看从用户得到输入的三种不同方法。第一种方法是使用Console类,它是通过系统对象访问。Console类的ReadLine()方法从用户命令行得到输入,并返回一个字符串给调用程序。使用这种方法做的好处是,你不需要导入任何东西,因为系统类是无处不在的可用的java.lang包的一部分。
使用Console方法的缺点是,它通常不会在像Ecliple和NetBeans的IDE中工作。Console只能保证你直接在JVM上运行Java代码时工作,否则会被警告。 System.console().readLine(); //输入,返回一个字符串 获取用户输入的第二种方法是使用Scan……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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”按钮,返回文本会被作为一个字符串返回给调用程序。
下面是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); } } |
当类被编译并运行时,会出现一个简单的对话框,要求输入,在控制台中回显给用户。这不仅简单和直接,而且它也是一个与用户进行交互更直观的方式。
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。