【问题标题】:How to print error when input is not int [duplicate]输入不是int时如何打印错误[重复]
【发布时间】:2015-04-26 16:30:03
【问题描述】:

到目前为止,我已经掌握了这个,我正在尝试在 java 中使用命令行。当输入不是 int 时,我想打印一个错误。

 private static void add(String[] args) {
  if (args.length == 1) {
    System.out.print("Error: Argument count mismatch");
  }
  int num = 0;
  for (int i = 1;i < args.length;i++) {
    if (isInteger(args[i]) == false) {
      System.out.print("Error: Argument type mismatch");
    }
    int a = Integer.parseInt(args[i]);
    num += a;
  }
  System.out.println(num);
}

如果输入不是 int,第二个 if 语句是我想打印错误的部分,我有一个 isInteger 方法。但我的程序反而崩溃或打印错误。

编辑:这是我的 isInteger 方法

 public static boolean isInteger(String s) {
  try { 
    Integer.parseInt(s); 
  } catch(NumberFormatException e) { 
    return false;
  }
  return true;
}

所以这里应该没有问题。

edit2:这是我得到的错误

java.lang.NumberFormatException: For input string: "a"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at MyCLIParser.add(MyCLIParser.java:46)
    at MyCLIParser.main(MyCLIParser.java:10)

【问题讨论】:

  • 你的 isInteger() 是什么样的?您在日志中遇到的错误是什么?
  • 正如@ChrisS 所说,提供错误的堆栈跟踪,并尝试包含您的 isInteger 方法
  • 在其中添加了我的 isInteger 方法。它只是崩溃,稍后会提出错误代码
  • 对不起,这是我得到的错误 java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt( Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at MyCLIParser.add(MyCLIParser.java:46) at MyCLIParser.main(MyCLIParser.java:10)
  • @Schuld 请将其添加到您的问题中,以便您的问题更清楚,以后人们可能会从中受益;)

标签: java


【解决方案1】:

欢迎来到 Stack Overflow。可以从堆栈跟踪中读取问题。这就是你所拥有的。

if (isInteger(args[i]) == false) {
      System.out.print("Error: Argument type mismatch");
    }
int a = Integer.parseInt(args[i]);

请注意,“if”之后没有“else”,因此即使 args[i] 不是整数,也会尝试再次计算“a”的值。

我希望你能通过这个提示弄清楚如何解决这个问题。

【讨论】:

    【解决方案2】:

    这是正常的,假设您的 args[i] 等于“someString”,那么当您调用 isInteger() 函数时将返回 false。然后,当你说isInteger(args[i]) == false 这意味着false == falsetrueSystem.out.print("Error: Argument type mismatch"); 将正确执行。

    之后,当您调用 int a = Integer.parseInt(args[i]); 而不捕获 NumberFormatException 时,您的应用程序因该异常错误而崩溃是正常的。

    要处理这个问题,您可以像 Khanna111 的回答中建议的那样添加一个 else 块,就像这样:

     private static void add(String[] args) {
      if (args.length == 1) {
        System.out.print("Error: Argument count mismatch");
      }
      int num = 0;
      for (int i = 1;i < args.length;i++) {
        if (isInteger(args[i]) == false) {
          System.out.print("Error: Argument type mismatch");
        }
        else {
        int a = Integer.parseInt(args[i]);
        num += a;
        }
      }
      System.out.println(num);
    }
    

    或者您可以使用continue,它允许执行跳转到for循环中的下一个元素并继续(更新,感谢汤姆的评论):

     private static void add(String[] args) {
      if (args.length == 1) {
        System.out.print("Error: Argument count mismatch");
      }
      int num = 0;
      for (int i = 1;i < args.length;i++) {
        if (isInteger(args[i]) == false) {
          System.out.print("Error: Argument type mismatch");
          continue;
        }
        int a = Integer.parseInt(args[i]);
        num += a;
      }
      System.out.println(num);
    }
    

    【讨论】:

    • @Tom 是的,因为我现在正在旅行,所以我疯了,谢谢您的建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2022-06-10
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多