Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用堆栈覆盖对象(Java)_Java_Object_Stack - Fatal编程技术网

使用堆栈覆盖对象(Java)

使用堆栈覆盖对象(Java),java,object,stack,Java,Object,Stack,我正试图写一个代码来显示一副牌中的所有牌。不幸的是,添加到堆栈中的最后一张卡似乎一直覆盖以前输入的所有卡。我怎样才能防止这种情况发生?现在当我输入代码时,它仅仅显示了行“黑桃王牌”52次 import java.util.*; public class cardSearcher{ public static void main(String[] args){ Stack<card> deck = new Stack<card>(); String[] value

我正试图写一个代码来显示一副牌中的所有牌。不幸的是,添加到堆栈中的最后一张卡似乎一直覆盖以前输入的所有卡。我怎样才能防止这种情况发生?现在当我输入代码时,它仅仅显示了行“黑桃王牌”52次

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);
  }
 }
}

静态的
变量属于整个类,而不是任何实例。当您修改这些变量时,您正在修改所有实例之间共享的变量。删除变量上的
静态
修饰符,使其针对每个实例进行个性化设置。

属于
静态
的变量属于整个类,而不是任何实例。当您修改这些变量时,您正在修改所有实例之间共享的变量。删除变量上的
static
修饰符,使其针对每个实例进行个性化设置。

在声明变量的value和suit时,应使用static

您可以使用私有字符串值声明这些值;私服生成了getter/setter。

这样做,您可以得到预期的结果

import java.util.Stack;

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.getValue() + " of "
                    + chosenCard.getSuit());
        }
    }
}

class card {
    private String value;

    private String suit;

    /**
     * @param value
     * @param suit
     */
    public card(String value, String suit) {
        this.value = value;
        this.suit = suit;
    }

    /**
     * @return the value
     */
    public String getValue() {
        return value;
    }

    /**
     * @param value
     *            the value to set
     */
    public void setValue(String value) {
        this.value = value;
    }

    /**
     * @return the suit
     */
    public String getSuit() {
        return suit;
    }

    /**
     * @param suit
     *            the suit to set
     */
    public void setSuit(String suit) {
        this.suit = suit;
    }

}
import java.util.Stack;
公共类卡片搜索器{
公共静态void main(字符串[]args){
堆栈组=新堆栈();
字符串[]值={“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”,
“杰克”、“女王”、“国王”、“王牌”};
字符串[]套装={“钻石”、“红心”、“梅花”、“黑桃”};
for(int i=0;i
在为value和suit声明变量时,应使用static

您可以使用私有字符串值声明这些值;私服生成了getter/setter。

这样做,您可以得到预期的结果

import java.util.Stack;

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.getValue() + " of "
                    + chosenCard.getSuit());
        }
    }
}

class card {
    private String value;

    private String suit;

    /**
     * @param value
     * @param suit
     */
    public card(String value, String suit) {
        this.value = value;
        this.suit = suit;
    }

    /**
     * @return the value
     */
    public String getValue() {
        return value;
    }

    /**
     * @param value
     *            the value to set
     */
    public void setValue(String value) {
        this.value = value;
    }

    /**
     * @return the suit
     */
    public String getSuit() {
        return suit;
    }

    /**
     * @param suit
     *            the suit to set
     */
    public void setSuit(String suit) {
        this.suit = suit;
    }

}
import java.util.Stack;
公共类卡片搜索器{
公共静态void main(字符串[]args){
堆栈组=新堆栈();
字符串[]值={“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”,
“杰克”、“女王”、“国王”、“王牌”};
字符串[]套装={“钻石”、“红心”、“梅花”、“黑桃”};
for(int i=0;i
愚蠢的问题,
卡片
实现在哪里?请使用标准Java约定和以大写字母开头的名称类。这似乎是你的
卡片
类的问题,是的,你应该使用大写的类名这对我来说很好,只需要一个简单的
卡片
类声明。这不是一个愚蠢的问题。50代表说
套装
静态的
;-)愚蠢的问题,
card
实现在哪里?请使用标准的Java约定和以大写字母开头的名称类。似乎这是
card
类的问题,是的,你应该使用大写字母作为类名称。这对我来说很好,只需要一个简单的
card
类声明。这不是一个愚蠢的问题。50代表说
套装
静态的
;-)你是说“你不应该使用静电”吗?你是说“你不应该使用静电”吗?