java - 解析 java main args[] 数组错误

标签 java command-line

您好,我被困在一个简单的 Java 练习中,我希望有人能提供帮助。

抱歉,如果这真的很简单,我是一个 java 新手。

我遇到的问题是:如果用户输入“help”以外的字符串,例如“foo”,则会收到以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "foo"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:447)

at java.lang.Integer.parseInt(Integer.java:497)

at NumberGuess.main(NumberGuess.java:10)

我认为正在发生的事情:“foo”没有被“else”捕获,因为 args[0] 是一个对象引用,而不是真正的字符串。

我想知道的是:如何捕获除“help”或数字“1”到“5”之外的所有内容?

这是代码...

public class NumberGuess {

public static void main(String args[]){

    int r;
    int g;

    if ((args[0].compareTo("help")) == 0){
        System.out.println("Enter a number between 1-5 to play.");
    } else if (Integer.parseInt(args[0]) > 0 && Integer.parseInt(args[0]) <= 5){

        r = ((int)(Math.random()));
        g = Integer.parseInt(args[0]);

        if (r == g){
            System.out.println("YOU WON!");
        } else {
            System.out.println("Wrong: number was " + r);
        }

    } else {
        System.out.println("Something went horribly wrong.");

    }}}

最佳答案

程序逻辑本质上是,“如果参数零不是'help',则将其解析为整数......”此时,会抛出异常,因为“foo”不是有效的整数。

最简单的方法是捕获 NumberFormatException 并打印更有用的消息。

if ("help".equals(args[0])) {
  System.out.println("Enter a number between 1 and 5 to play.");
}
else {
  int number;
  try {
    number = Integer.parseInt(args[0]);
  }
  catch (NumberFormatException ex) {
    System.out.println("Input is not an integer: " + args[0]);
    return;
  }
  if ((number < 1) || (number > 5)) {
    System.out.println("Number out of bounds: " + number);
    return;
  }
  int r = new java.util.Random().nextInt(5) + 1;
  if (number == r)
    System.out.println("You won!");
  else
    System.out.println("You lost!");
}

关于java - 解析 java main args[] 数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/989545/

相关文章:

java - 泛型 Java 1.7 中的钻石 - 如何在 1.6 中为 Java 编译器编写此代码

java - 在 Java 中通过 HTTP Post 发送多行字符串

macos - 如何在 OSX 中从命令行启动 GUI Emacs?

c - 如何交换命令行中指定文件(文件名和字符)中的字符?

ruby - 无法从特定 PDF 中提取文本和图像

regex - 使用 Grep 和 Regex 在一行中搜索多个匹配项

java - 创建自定义计划作业监视器 ATG

java - Scala 可运行 JAR 的 ProGuard 进程

php - 如何检查命令是否可以执行?

java - Ant 构建脚本中的 JUnit 尝试删除 .svn 目录但失败