我在命令行中插入值...输入的整数将被插入到我的向量中,并且诸如“ dog”之类的字符串将被NumberFormatException捕获。但是,在我的代码中,我收到了ArrayIndexOutOfBoundsException ...我知道为什么,但是如何防止这种情况发生?
我希望我的代码打印出矢量接受整数,但拒绝字符串,并继续在命令行中读取我的输入。
我面临的其他问题...如何得到导致字符串打印的错误?当我只想“ dog”时,我的代码给我“用于输入字符串:“ dog””
int i;
int result;
Vector numbers = new Vector();
for (i = 0; i < args.length; i++) {
try {
result = Integer.parseInt(args[i]);
System.out.println("Converter method says integer OK - " + result);
numbers.add(i, result);
} catch (NumberFormatException e) {
System.out.println("Catch block says the argument" + e.getMessage() + "is ignored because" + e.getMessage());
}
}
示例输入:11 22 33狗44猫55 66
**
我的输出:
转换器方法显示整数OK-11
转换器方法显示整数OK-22
转换器方法显示整数OK-33
Catch块表示参数对于输入字符串:“ cat”被忽略,因为对于输入字符串:“ cat”
转换器方法显示整数OK-44
线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:4> 3
at java.base/java.util.Vector.insertElementAt(Vector.java:619)
at java.base/java.util.Vector.add(Vector.java:857)
at exceptionalcommandline.ExceptionalCommandLine.main(ExceptionalCommandLine.java:16)
**
预期输出:
转换器方法显示整数OK-11
转换器方法显示整数OK-22
转换器方法显示整数OK-33
Catch块表示参数“ cat”被忽略,因为“ cat”
转换器方法显示整数OK-44
catch块说参数“ dog”被忽略,因为“ dog”
转换器方法显示整数OK-55
转换器方法显示整数OK-66
答案 0 :(得分:0)
即使您遇到例外,我的价值仍然会增加。因此,在异常之后,可用索引与您要添加的i值之间将存在间隙。因此,将代码更改为:
for (i = 0; i < args.length; i++) {
try {
result = Integer.parseInt(args[i]);
System.out.println("Converter method says integer OK - " + result);
numbers.add(result);
} catch (NumberFormatException e) {
System.out.println("Catch block says the argument" + e.getMessage() + "is ignored because" + e.getMessage());
}
}