2015-10-26 81 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