【问题标题】:How to get my ADT stack to show its contents如何让我的 ADT 堆栈显示其内容
【发布时间】:2019-12-08 22:40:32
【问题描述】:

我正在尝试为一副牌创建一个 ADT 堆栈,该堆栈将通过界面执行不同的功能。我正在尝试让 show 功能正常工作,并在下面提供了我的代码。我得到的唯一错误是在行中的 for 语句中

套牌 [i] = 牌 [i %13] + 花色 [i / 13];

错误表明所需的类型是 T 并且正在发生的类型是 String。我知道这一定是卡片和西装数组的类型是字符串,但是当我将它们更改为私有类型 T 时,内容带有红色下划线,并表示内容的类型是字符串,并且需要 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;
}

【问题讨论】:

  • 报错信息时,请复制准确的错误信息文本。
  • 你有一个T (private T deck[]) 类型的数组。您正在尝试添加 String 作为数组的元素。这是行不通的,因为无法将String 分配给T。我不清楚你想在这里做什么,所以我不可能为你的问题提供解决方案。这个类真的需要支持泛型吗?好像不是。
  • 抱歉,我正在尝试将该卡片和套装数组添加在一起以创建 52 个项目,然后将这些项目添加到包含卡片组中所有卡片的卡片组数组中。对于这个特定的场景,我想为一副纸牌创建一个 ADT,但我不确定如何去做。任何帮助表示赞赏,谢谢。

标签: java arrays stack abstract-data-type


【解决方案1】:

虽然您说您正在尝试为 Stack 创建一个抽象数据类型 (ADT),但这似乎不是您的代码所做的。您的代码有许多不属于抽象数据类型的特定于卡片应用程序的代码。

如果您想编写自己的 Stack 类,也许作为一个学术项目,您可能希望编写一个类,以便将来在不同项目中与不同类型的对象一起使用。这就是类声明中&lt;T&gt; 的目的——它让您现在就可以编写类,并在以后使用该类时提供实际的元素类型。

例如,您可以这样编写 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<>();

【讨论】:

  • 嗨,感谢您回复我。我的 deckOfCards 类实现的 CardInterface 具有所有 pop、push、peek 调用。我正在努力让初始甲板阵列将两个字符串阵列卡和套装集成到所有卡片都将出现的甲板阵列中。我唯一能想到的就是创建一个测试类,然后在执行其他任务之前将所有 52 张卡片推送到甲板阵列。我想知道你是否知道一种更好更有效的方法来解决这个问题。会不会像 Stack 甲板 = new Stack();你提供了?谢谢
猜你喜欢
  • 2023-04-06
  • 2015-03-03
  • 2020-12-18
  • 1970-01-01
  • 2021-02-06
  • 2019-09-02
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
相关资源
最近更新 更多