我有这段代码
public String[][] checkBoxes(String[][] varden){
ArrayList[][] tillatnaSiffror = new ArrayList[9][9];
for(int i=0;i<9;i++){
for(int ruta=0;ruta<9;ruta++){
if(tillatnaSiffror[i][ruta] == null){
tillatnaSiffror[i][ruta] = new ArrayList<Integer>();
for(int add=1;add<=9;add++){
tillatnaSiffror[i][ruta].add(add);
}
}
if(varden[i][ruta].equals("X")){
for(int a=0;a<9;a++){
try {
System.out.println(tillatnaSiffror[i][ruta].indexOf(Integer.parseInt(varden[i][ruta])));
System.out.print("Testing");
} catch(Throwable n){
System.out.print("Throws exception");
}
}
}
}
}
}
tillatnaSiffror[i][ruta]
是一个包含数字1-9的ArrayList,变量i
和ruta
来自包含我的代码的for循环。二维数组varden
包含数字1到9的字符串。问题是,它不是打印我正在寻找的索引,而是什么都不做。之后它也不会打印“测试”,也不会因为异常而被捕获。我计算了例外情况。
但是,如果我像这样放零:
System.out.println(tillatnaSiffror[0][0].indexOf(Integer.parseInt(varden[0][0])));
然后它打印出索引,以及“测试”文本。任何想法为什么它不适用于变量?这不是ArrayIndexOutOfBounds
问题;变量是正确的。
答案 0 :(得分:3)
如果没有整个代码并且不知道抛出了什么异常,我唯一的建议是将该行拆分为多个语句并查看它弹出的位置。然后你可能会自己找到答案。
String s = varden[i][ruta];
int i = Integer.parseInt(s);
List<Integer> l = tillatnaSiffror[i][ruta];
int idx = l.indexOf(i);
System.out.println(idx);
修改强>
if(varden[i][ruta].equals("X")){
然后在if
:
Integer.parseInt(varden[i][ruta]))
你看到了问题吗?
顺便说一句,你似乎没有使用第三个a
的{{1}},是吗?
答案 1 :(得分:1)
几乎可以肯定的是,你得到一个运行时异常,这是未经检查的 - 这意味着编译器不会警告你需要捕获。您获得的最可能的运行时异常是ArrayIndexOutOfBoundsException
或NumberFormatExcpetion
。
要“修复”此问题,请尝试catch (Throwable e)
- 这肯定会抓住try
内的任何内容。我怀疑你不是实际上捕获异常但是它的一些子类。
答案 2 :(得分:0)
代码将:
Exception
Throwable
,而Exception
不是Throwable
的子类,而是在其他地方捕获。 并非所有Exception
都是Error
的子类:Throwable
s是Exception
的子类,但不是{{1}}的子类。