到目前为止,我已经知道了,我正在尝试在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)
欢迎使用堆栈溢出。可以从堆栈跟踪中读取问题。这就是你所拥有的。
if (isInteger(args[i]) == false) {
System.out.print("Error: Argument type mismatch");
}
int a = Integer.parseInt(args[i]);
请注意,“if
”后面没有“else
”,因此即使args[i]不是整数,也会尝试重新计算“a
”的值。
我希望你能用这个提示来解决这个问题。
这是正常的,假设您的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);
}
我想打印这样一行:
我想将单词B和E显示为大写字符。我该怎么做?
我试图用两种不同的方式做阶乘方法。第一个是迭代方法,它非常适合打印出来。我很难打印出递归方法,它是一个int方法而不是val。我将如何通过使用与迭代方式相同的输入来打印递归方法?非常感谢任何帮助。我正在尝试在我的main中调用每个方法。 Java代码:
这是我的体格 错误:任务“DemoProject:transformClassesWithJarMergingForDebug”的执行失败。 com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:android/support/v4/提供者/DocumentsContractApi19.
问题内容: 我正在尝试修复这段代码,该代码是从具有车牌号和车主列表(该格式)的哈希图进行打印的。我试图通过printOwners()仅打印出所有者;但是我不能不打印重复的东西。 我已经玩了一段时间,但似乎无法跳过重复项。 这是我的代码: 问题答案: 要删除重复项,请使用: 或者使用Java 8 和方法: