我正在尝试为一副纸牌创建ADT堆栈,这些纸牌将通过该界面执行不同的功能。我试图使show函数正常工作,并在下面提供了我的代码。我遇到的唯一错误是在
行的for语句内甲板[i] =牌[i%13] +西装[i / 13];
该错误指出所需的类型为T,而正在出现的类型为String。我知道这必须是字符串类型的卡并适合数组,但是当我将其更改为私有类型T时,内容用红色下划线标出,并表示内容的类型为String且类型为T。我不确定自己做错了什么,感谢您提供任何指导。
public final class deckOfCards<T> implements CardInterface<T> {
String [] suit = {"Hearts", "Diamonds", "Spades", "Clubs"};
String[] cards = {"2 of", "3 of", "4 of", "5 of", "6 of", "7 of", "8 of",
"9 of", "10 of",
"Jack of", "Queen of", "King of", "Ace of"};
private T [] deck;
private int topIndex;
private boolean initialized = false;
private static final int DECK_SIZE = 52;
public deckOfCards(){this(DECK_SIZE);}
public deckOfCards(int initialCapacity) {
// Check the initial capacity:
checkDeck(initialCapacity);
T [] tempStack = (T[]) new Object[initialCapacity];
deck = tempStack;
topIndex = -1;
initialized = true;
}
public T show() {
T top = null;
for (int i = 0; i < deck.length; i++) {
deck[i] = cards[i % 13] + suit[i / 13];
System.out.println(deck);
}
return top;
}
答案 0 :(得分:0)
尽管您说过您正在尝试为堆栈创建抽象数据类型(ADT),但这似乎并不是您的代码所要做的。您的代码中包含很多不属于抽象数据类型的特定于卡片的应用程序专用代码。
如果您想编写自己的Stack类(也许作为一个学术项目),则希望将来编写一个可以在不同项目上与不同种类的对象一起使用的类。这就是类声明中<T>
的目的-它使您可以立即编写类,并在以后使用类时提供实际的元素类型。
例如,您可以编写如下的Stack类:
public class Stack<T> {
// declare your fields here (an array of T would be a good idea)
public Stack() {
// write the body of your class constructor here
}
public void push(T item) {
// write code to add a new item to the top of the stack
}
public T pop() {
// write code to return and remove the top item on the stack
}
}
然后,您可以通过制作纸牌叠来在纸牌游戏应用程序中使用纸叠:
Stack<Card> deck = new Stack<>();
或一堆字符串:
Stack<String> deck = new Stack<>();