java - 用堆栈覆盖对象 (Java)

标签 java object stack

我正在尝试编写一个代码来显示一副牌中的所有牌。不幸的是,添加到堆栈中的最后一张卡片似乎会覆盖所有之前输入的卡片。我怎样才能防止这种情况发生?现在,当我输入代码时,它只显示 52 次“Ace of Spades”这一行。

import java.util.*;

public class cardSearcher{

public static void main(String[] args){
 Stack<card> deck = new Stack<card>();
 String[] value = {"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"};
 String[] suit = {"Diamonds","Hearts","Clubs","Spades"};

for (int i=0;i<value.length;i++){
  for (int j=0;j<suit.length;j++){
        deck.push(new card(value[i],suit[j]));
  }
}

while (!deck.empty()){
  card chosenCard = deck.pop();
  System.out.println(chosenCard.value +" of "+ chosenCard.suit);
  }
 }
}

这是卡片代码:

public class card {

    public static String value = "";
    public static String suit = "";

    public card(String valueofCard, String suitofCard) {
        card.value = valueofCard;
        card.suit = suitofCard;
    }
}

最佳答案

static 的变量作为一个整体属于类,而不属于任何实例。当您修改它们时,您正在修改在所有实例之间共享的变量。删除变量上的 static 修饰符,使它们针对每个实例进行个性化。

关于java - 用堆栈覆盖对象 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648841/

相关文章:

java - 为什么 IdentityHashMap.keySet().removeAll(keys) 不使用标识?这是一个错误吗?

java - 为什么我可以使用 Scala REPL 中的 Java 库而不是脚本中的?

java - 需要从 spring boot 2.0 中排除 spring-orm 模块并从 jar 文件中使用它的旧版本

java - 使用斯坦福 coreNLP 进行中文句子分割

javascript - 通过提示在数组中添加一个新对象

带无效数据成员问题的 C 链表/堆栈

c - 使用缓冲区溢出覆盖位于缓冲区下方的局部变量

python - 从 python 中获取容器/父对象

javascript - 为什么需要使用 Object.create()

assembly - 初学者学习汇编在函数调用后保留 esp