将对象类型转换为整数

时间:2014-03-11 03:48:29

标签: java

我无法解决这个问题。

假设我有一个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.

2 个答案:

答案 0 :(得分:2)

我不完全确定你的类型约束,但......

如果您有Stack<P>,那么您只能pushpop类型P。由此,我们分为两种可能性:

  • 如果P泛型类型,请停止使用它,然后使用Integer

    Stack<Integer> board = new Stack[3][3];
    

    然后,您可以pushpop而无需进行类型转换。

  • 如果P自定义类,请弹出它并从中提取整数值。

    P value = board[0][0].pop(); // or peek(), whichever use is necessary.
    // with value, call whichever getter is appropriate.
    

在任何一种情况下,编写方法应该很简单 - 考虑rowcol直接对应于访问数组。

board[row][col] // gives you the Stack you want

现在,为了完全不同的切线, 真的 不应该使用Stack。请改为Deque

Deque<P> board = new ArrayDeque[3][3];

您可以访问pushpoppeek的同一界面,而不会产生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