为什么列表中的所有卡都相同?
我尝试了hand.add(i,card);
但输出仍然相同。

Main.java

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Main {

    public static void main(String[] args) {
        List<Card> hand = new ArrayList();
        Card card = new Card((short) 7,"red");
        int b = 0;
        Random rn = new Random();
        for (int i=0;i<7;i++){
            card.setValue((short) (rn.nextInt((14 - 7) + 1) + 7));
            b = rn.nextInt(4);
            String[] colors = {"green","red","gold","brown"};
            card.setColor(colors[b]);
            System.out.println("Adding card to hand: " + card.getColor() + card.getValue() + " to: " +i);
            hand.add(card);
        }
        System.out.println("Your cards: ");
        for (Card k: hand) {
            System.out.println(k.show());
        }


    }
}


Card.java

public class Card {
    public short getValue() {
        return value;
    }

    public void setValue(short value) {
        this.value = value;
    }

    short value;

    public String getColor() {
        return color;
    }

    public void setColor(String farba) {
        this.color = farba;
    }

    String color;

    public Card(short value, String color) {
        this.value = value;
        this.color = color;
    }

    public String show(){
        return color + value;
    }
}


输出:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java
Adding card to hand: red13 to: 0
Adding card to hand: green10 to: 1
Adding card to hand: gold8 to: 2
Adding card to hand: brown10 to: 3
Adding card to hand: gold10 to: 4
Adding card to hand: gold8 to: 5
Adding card to hand: gold7 to: 6
Your cards:
gold7
gold7
gold7
gold7
gold7
gold7
gold7


Lorem ipsum dolor坐下,一直保持着安静的状态。 Aenean nisl.Curabitur ac arcu ornare,aliquet eros eu,premium massa。

最佳答案

您正在对list中的所有项目使用相同的Card对象,但是您需要不同的对象(每个Card对象都具有其自己的颜色和值),因此您必须在new Card循环内创建for,如图所示下面:

    int b = 0;
    Random rn = new Random();
    for (int i=0;i<7;i++){

        b = rn.nextInt(4);
        String[] colors = {"green","red","gold","brown"};

        Card card = new Card((short) (rn.nextInt((14 - 7) + 1) + 7),colors[b]);

        System.out.println("Adding card to hand: " +
             card.getColor() + card.getValue() + " to: " +i);

        hand.add(card);
    }

07-24 09:38
查看更多