2011-09-04 18 views
0

我有了這個代碼ArrayList.indexOf殺死代碼,但不會崩潰的程序,也不是逮住

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 iruta來自for循環,包裹我的代碼。二維數組varden包含數字1到9的問題是,不是打印我要找的,它什麼都不做索引的字符串。之後它也不會打印「測試」,也不會因爲例外而被捕獲。我計算了例外的數量。

但是,如果我把零的是這樣的:

System.out.println(tillatnaSiffror[0][0].indexOf(Integer.parseInt(varden[0][0]))); 

然後打印出來的指數,也是「測試」文本。任何想法,爲什麼它不適用於變量?這不是ArrayIndexOutOfBounds問題;變量是正確的。

+0

您是否嘗試過通過您的代碼在調試器步進? –

+0

基本上,你的診斷中的某些東西被搞砸了。但很難說沒有任何方法來重現問題。如果你在調試器中運行它並闖入它,會發生什麼?你有沒有嘗試添加一個finally塊來防止異常吞嚥? –

+3

沒有看到*實際的*源代碼,有很多我們可以給予的幫助。 –

回答

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])) 

你看這個問題? 順便說一句,你似乎沒有使用第三fora任何地方,是嗎?

+0

是的,我現在一定會看到問題!被解析的部分應該有'a'變量而不是'ruta',因此是for循環。非常感謝! –

0

該代碼將任一:

  • 打印「測試」
  • 拋出Exception這是由「捕捉」塊
  • 捕獲或拋出Throwable不是的Exception和子類被捕到其他地方。

並非所有Throwable s爲的Exception子類:Error s爲的Throwable子類,但不Exception

+3

-1所有異常** ARE ** ** Exception **的子類,尤其是'RuntimeExceptipn' – Bohemian

+0

[Basic Java Exception Hierarchy](http://www.javamex.com/tutorials/exceptions/exceptions_hierarchy.shtml) - 注意異常和錯誤之間的區別。不過,我同意其他兩個子彈如此,+1。我相信這篇文章中的代碼是「缺乏」的。 – 2011-09-04 21:42:01

+0

更新了答案,使其更加準確,實際上這不是一個檢查/未檢查的事情,而是一個異常/錯誤的事情。 –

1

幾乎可以肯定,你得到一個運行時異常,這是未經檢查的 - 這意味着,編譯器不會警告你需要追趕。您得到最可能的運行時異常是ArrayIndexOutOfBoundsExceptionNumberFormatExcpetion

要「解決」這個問題,請嘗試catch (Throwable e)而不是 - 那肯定會吸引try內的任何東西。我懷疑你是不是實際上醒目異常,但一些子體。

+1

爲什麼抓住'Throwable'?你認爲他得到了「錯誤」嗎? –

+0

我同意Marius ...和錯誤是(或者真的*應該是*)程序致命。沒有跡象表明代碼引發了另一個Throwable。我懷疑這個問題與帖子中給出的例子有關。 – 2011-09-04 21:42:46

相關問題