关于java:当输入不是int时如何打印错误

How to print error when input is not int

本问题已经有最佳答案,请猛点这里访问。

到目前为止,我已经知道了,我试图在Java中使用命令行。当输入不是int时,我想打印一个错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 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方法

1
2
3
4
5
6
7
8
 public static boolean isInteger(String s) {
  try {
    Integer.parseInt(s);
  } catch(NumberFormatException e) {
    return false;
  }
  return true;
}

所以这里不应该有问题。

伊迪丝2:这是我犯的错误

1
2
3
4
5
6
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)


欢迎使用堆栈溢出。可以从堆栈跟踪中读取问题。这就是你所拥有的。

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

注意,"EDOCX1"〔1〕后面没有"EDOCX1"〔0〕,因此即使args[i]不是整数,也会尝试重新计算"EDOCX1"〔2〕的值。

我希望你能用这个提示来解决这个问题。


这是正常的,假设args[i]等于"somestring",那么当调用isInteger()函数时,它将返回false。然后,当你说isInteger(args[i]) == false时也就是说false == false,就是true。而System.out.print("Error: Argument type mismatch");将正常执行。

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

要处理这个问题,您只需添加一个类似于khanna111答案中建议的其他块,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 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循环中的下一个元素,并继续执行(更新,感谢Tom的评论):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 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);
}