当前位置: 首页 > 知识库问答 >
问题:

输入不是int[重复]时如何打印错误

彭霄
2023-03-14

到目前为止,我已经知道了,我正在尝试在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);
}

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

编辑:这是我的isInteger方法

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

所以这里应该没有问题。

编辑2:这里是我得到的错误

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)

共有2个答案

晏卓君
2023-03-14

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

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

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

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

岑畅
2023-03-14

这是正常的,假设您的args[i]等于“someString”,那么当您调用isinteger()函数时,它将返回false。然后,当您说是integer(args[i])==false时,这意味着是false==false是true。并且system.out.print(“错误:参数类型不匹配”);将正确执行。

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

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

 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的注释,已更新):

 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);
}
 类似资料: