如何在输入不是整数时打印错误信息。

11 浏览
0 Comments

如何在输入不是整数时打印错误信息。

目前我做到了这一步,我正在尝试在Java中使用命令行,并且想在输入不是整数时打印出错误信息。\n

 private static void add(String[] args) {
  if (args.length == 1) {
    System.out.print("错误:参数数量不匹配");
  }
  int num = 0;
  for (int i = 1;i < args.length;i++) {
    if (isInteger(args[i]) == false) {
      System.out.print("错误:参数类型不匹配");
    }
    int a = Integer.parseInt(args[i]);
    num += a;
  }
  System.out.println(num);
}

\n第二个if语句是我想要在输入不是整数时打印出错误信息的部分,我有一个isInteger方法。但是我的程序崩溃了,而不是打印出错误信息。\n编辑:这是我的isInteger方法\n

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

\n所以这里不应该有问题。\n编辑2:这是我收到的错误信息\n

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)

0
0 Comments

问题:如何在输入不是整数时打印错误?

出现原因:当调用isInteger()函数时,如果args[i]的值是字符串,isInteger()函数会返回false。然后,当执行isInteger(args[i]) == false时,意味着false == false,结果为true。然后,System.out.print("Error: Argument type mismatch");语句将正确执行。之后,当在没有捕获NumberFormatException的情况下调用int a = Integer.parseInt(args[i]);时,应用程序崩溃并抛出异常错误。

解决方法1:可以按照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);
}

解决方法2:可以使用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);
}

0
0 Comments

问题出现的原因是在判断输入是否为整数时没有添加else语句,导致即使输入不是整数,仍然会尝试计算变量a的值。解决方法是在if语句后面添加else语句,并在else语句中打印错误信息。下面是修改后的代码:

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

通过这个提示,希望你能解决这个问题。

0