我无法解决这个问题。
假设我有一个Stack<P> board = new Stack[3][3];
并且我将每个行和列初始化为一个空堆栈。
让我们看看我将P
对象推到了board[1][2].push(P)
。我知道我可以使用简单方法board[1][3].peek()
访问此堆栈的顶部;这将返回类型为P
的top元素。这就是问题所在。
我被告知写一个名为...的函数
public int getTopPiece(int row, int col)
返回一个整数,该整数的顶部对象的值为P
。有什么建议?
P is an object that holds 2 integers, 1 indicating the value of the piece and the second the value of the player.
答案 0 :(得分:2)
我不完全确定你的类型约束,但......
如果您有Stack<P>
,那么您只能push
或pop
类型P
。由此,我们分为两种可能性:
如果P
是泛型类型,请停止使用它,然后使用Integer
。
Stack<Integer> board = new Stack[3][3];
然后,您可以push
和pop
而无需进行类型转换。
如果P
是自定义类,请弹出它并从中提取整数值。
P value = board[0][0].pop(); // or peek(), whichever use is necessary.
// with value, call whichever getter is appropriate.
在任何一种情况下,编写方法应该很简单 - 考虑row
和col
直接对应于访问数组。
board[row][col] // gives you the Stack you want
现在,为了完全不同的切线, 真的 不应该使用Stack
。请改为Deque
。
Deque<P> board = new ArrayDeque[3][3];
您可以访问push
,pop
和peek
的同一界面,而不会产生Vector
的同步开销(因此,{{1}会给你。
答案 1 :(得分:2)
你要离开这里有一件至关重要的作品。你没有给我们的是P是什么以及如何将它转换为整数。如果您要编写一个名为getTopPiece(int row,int col)的函数,并且希望它返回P对象的整数值,那么首先需要一种方法来获取P对象的整数值,可能是通过一个P.getIntegerValue()函数。如果你的P类中有一个getIntegerValue函数,那么你可以这样做:
public int getTopPiece(int row, int col)
{
return board[row][col].peek().getIntegerValue();
}
否则我认为我们无法提供任何帮助。你需要有办法自信地将P转换为整数。 除非 P是Integer的实例 - 在这种情况下你可以简单地执行
public int getTopPiece(int row, int col)
{
return board[row][col].peek();
}
因为(假设你正在使用Java)整数可以自动直接转换为int。
编辑:注意到你现在有一个片段值,它可以写成(假设你想偷看而不是删除元素:)。
public int getTopPiece(int row, int col)
{
return board[row][col].peek().piece;
}
虽然,我想问:你有没有理由使用Stack?你想要的碎片能够堆叠在一起吗?如果是这种情况,那么您想要堆叠多少件是否有限制?因为如果是这样,你会想要使用数组。但是没有限制吗?因为如果是这样,那么如前所述,你想要使用ArrayDeque
。