本问题已经有最佳答案,请猛点这里访问。
到目前为止,我已经知道了,我试图在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);
}
如果输入不是int,那么第二个if语句是我要打印错误的部分,我有一个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)
你的isinteger()是什么样子的?您在日志中出现的错误是什么?
正如@chris所说,提供错误的堆栈跟踪,并尝试包括isinteger方法
在其中添加了我的Isinteger方法。它只是崩溃,稍后会显示错误代码
对不起,这里的错误是Java.Lang.NoMuFrimeExtExtry:Java.Lang.No.BurbFrimeExtExtry.FordIntryString(未知源),在Java.Lang.Onth.Time.PARSETIN(未知源)处,在MyclipServer上的Java.Lang.Onth.PARSETIN(未知源)。在MyclipServer中添加(MyclipPARS.java:46)。
@舒尔德请把它加到你的问题中,这样你的问题会更清楚,以后人们会从中受益。
@塔里克就是这么做的:)你知道它为什么会崩溃吗?
@我在下面添加了我的答案
欢迎使用堆栈溢出。可以从堆栈跟踪中读取问题。这就是你所拥有的。
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答案中建议的其他块,如下所示:
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);
}
@汤姆,是的,我现在旅行的时候脑子有点乱,谢谢你的建议。