【问题标题】:Getter returns the same Card as objectGetter 返回与对象相同的 Card
【发布时间】:2016-05-03 06:19:19
【问题描述】:

我有这个输出:

IN METHOD -> 花色:心等级:四

House: Heart - 四

IN METHOD ->花色:钻石等级:ACE

House:Diamond - ACE(应该是 Heart-4) 玩家:Diamond - ACE

在我为 wPlayer 设置最后一张卡片后,房子也发生了变化,但我的代码中没有看到任何显示它被更改的内容。即使在调试中。

还有如下代码:

public class test{
    Card lastCard;
    public test(){
        this.lastCard=null;
    }

    public void setLastCard(Card lcard){

        this.lastCard=lcard;
    }

    public Card getLastCard(){

        return this.lastCard;
    }

    static test hPlayer = new test();
    static test wPlayer = new test();

    public static Card generateCard(Random randoCard){
       Suit s = Suit.values()[randoCard.nextInt(Suit.values().length)];
       Rank r = Rank.values()[randoCard.nextInt(Rank.values().length)];
       System.out.println("IN METHOD--->Suit: "+s+" Rank: "+r);
        return new Card(s,r);
    }

    public static void main(String[] args) throws InterruptedException {
        Random randoCard = new Random(System.currentTimeMillis());

        hPlayer.setLastCard(generateCard(randoCard));
        System.out.println("House: " +hPlayer.getLastCard() );
         TimeUnit.SECONDS.sleep(10);

        wPlayer.setLastCard(generateCard(randoCard));
        System.out.println("House: " +hPlayer.getLastCard()+" Player: "+ wPlayer.getLastCard() ); 

    }
}

【问题讨论】:

  • 你能告诉我们Card类吗? Card#toString 打印什么?
  • 是卡使用任何静态变量
  • 正是我下面的卡片类帮助了我相信的 to 字符串。不过,感谢您查看此内容。

标签: java oop object setter getter


【解决方案1】:

由于您没有提供 Card 类,我假设它是一个基本的值类:

public class Card {
    private final Suit suit;
    private final Rank rank;

    public Card(Suit suit, Rank rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "Card [suit=" + suit + ", rank=" + rank + "]";
    }
}

运行你的代码然后给我输出:

IN METHOD--->Suit: SPADES Rank: FOUR
House: Card [suit=SPADES, rank=FOUR]
IN METHOD--->Suit: CLUBS Rank: THREE
House: Card [suit=SPADES, rank=FOUR] Player: Card [suit=CLUBS, rank=THREE]

因此,您似乎要么在发布之前修复了一个错字(两次引用同一玩家),要么您的 Card 实现不是值类(它使用静态字段吗?)

【讨论】:

  • 抱歉我睡着了。但是是的,这显然与我以前的 toString 方法有关。我用了你上面放的那个。非常感谢您的帮助。
猜你喜欢
  • 2019-02-22
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2014-11-27
  • 1970-01-01
  • 2017-07-17
相关资源
最近更新 更多