【问题标题】:Dimensions of 2d char array from ArrayDeque Object来自 ArrayDeque 对象的二维字符数组的尺寸
【发布时间】:2015-10-26 22:34:36
【问题描述】:

我有一个将 char[][] 作为参数的方法(基本上是一个 NxN 字符网格),并使用 ArrayDeque 来查看整个二维数组。我想从 ArrayDeque 中删除 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[][] 的情况下获取行和列?

【问题讨论】:

  • 一些 ClassCastExceptions 仅在运行时抛出,因此这是正常行为。

标签: java casting arraydeque


【解决方案1】:

ArrayDeque 在做什么? 什么都没有!你增加了一个值,然后又把它拿回来。

虽然假设gridchar[][],并且知道push() 接受Object,但它隐式地自动装箱该值。

简而言之,你得到的是:

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

您将Character 转换为char[][],所以您当然会得到ClassCastException

【讨论】:

  • 上面是简化的,我是用ArrayDeque作为栈来检查的。这是一种寻路算法,因此我需要根据 grid[][] 数组中的值与其他索引的接近程度来检查它们。
  • 不会改变你为什么得到ClassCastException的事实。你推送Character 并转换为char[][]
  • 是的,但是如何避免异常?我可以这样做: int row=stack.pop().length-1; //这是一个编译器错误,但有没有类似的东西不是?
  • 你如何推送整个grid,而不仅仅是0,0 中的值?使用泛型怎么样,将stack定义为ArrayDeque<char[][]>,这样就不用强制转换了?
  • 从技术上讲,我什至没有尝试将值推入 0,0;我正在尝试使用 ArrayDeque 以 char[][]s 的形式保存坐标对,然后我可以将其与网格的实际内容进行比较。所以事后看来(尽管这仍然存在同样的问题)我的初始推送应该是 stack.push(new char[0][0]);
猜你喜欢
  • 1970-01-01
  • 2016-07-12
  • 2013-11-08
  • 1970-01-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多