2015-10-26 43 views
-1

我有一個方法將一個char [] []作爲參數(基本上是一個NxN字符網格),並且正在利用ArrayDeque來查看整個二維數組。我想從ArrayDeque取出一個char [] []對象的行和列,目前使用:來自ArrayDeque對象的2d char數組的尺寸

   ArrayDeque stack=new ArrayDeque(); 
      stack.push(grid[0][0]); //grid being the 2d array passed to the method 
      char[][] temp=(char[][]) stack.pop(); 
      int row=temp.length-1; 
      int column=temp[0].length-1; 

此編譯在Eclipse中,但在運行時會拋出一個ClassCastException。有沒有辦法在上面第二行沒有char [] []大小寫的情況下獲取行和列?

+0

某些ClassCastException僅在運行時拋出,因此這是正常行爲。 –

回答

1

ArrayDeque在做什麼? 沒有!您添加一個值,然後將其取回。

雖然,假設gridchar[][],並且知道push()需要一個Object,它是隱式自動裝箱值。

總之,你得到的是:

temp = (char[][])Character.valueOf(grid[0][0]) 

您鑄造Characterchar[][],所以當然你得到一個ClassCastException

+0

上面是簡化的,我使用ArrayDeque作爲一堆位置來檢查。這是一種尋路算法,所以我需要根據它們與其他索引的接近性來檢查grid [] []數組內的值。 – user2484163

+0

不會改變您爲什麼得到'ClassCastException'的事實。你推一個'Character'並轉換爲'char [] []'。 – Andreas

+0

是的,但我如何避免異常?我可以這樣做: int row = stack.pop()。length-1; //這是一個編譯器錯誤,但有沒有類似的東西? – user2484163