如何在输入不是整数时打印错误信息。
如何在输入不是整数时打印错误信息。
目前我做到了这一步,我正在尝试在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)
问题:如何在输入不是整数时打印错误?
出现原因:当调用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); }