我不明白这一行是如何工作的:"System.out.println("\nCard: " + Deck.get(number).getValue() + " of " + Deck.get(number).getSuit() ) ;"

I don't understand how this line works: "System.out.println("\nCard: " + Deck.get(number).getValue() + " of " + Deck.get(number).getSuit() );"

下面的代码是我现在无法联系到的人与我分享的代码。我对数组列表、方法链以及几乎所有的编码仍然是个新手。我尝试将“Deck.get(number).getValue()”转换为“Deck.getValue()”和其他一些变体,但每次我这样做时代码似乎都会失败。有人可以解释那条特定的线以及为什么它只在链接时有效吗?

P.S.

进口java.lang.Math; 导入 java.util.*;

publicclass卡片{

private String suit;
private String value;


public static void draw(){

    int number = (int) (Math.random() * Deck.size());
    System.out.println("\nCard: " + Deck.get(number).getValue() + " of " + Deck.get(number).getSuit() );
    Deck.remove(number);
}

public static void count(){

    System.out.println("\nCards left in the Deck: " + Deck.size());

}

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

static ArrayList<Card> Deck = new ArrayList<Card>(52);

public String getSuit(){
    return suit;
}

public String getValue(){
    return value;
}

public void setSuit(String suit){
    this.suit = suit;
}

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


public static void main (String[] args){

    String[] Suits = {"Clubs", "Spades", "Hearts", "Diamonds"};
    String[] Values = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};

    for(int i = 0; i < 4; i++){
        for(int a = 0; a < 13; a++){
            Card Card = new Card(Suits[i], Values[a]);
            Deck.add(Card);
        }
    }
    int choice;
    do{
        cls();

        System.out.println(" -----------");
        System.out.println("|1. Draw    |");
        System.out.println("|2. Count   |");
        System.out.println("|3. Exit    |");
        System.out.println(" -----------");

        System.out.println("Choose an Action: ");
        Scanner sc = new Scanner(System.in);
        choice = sc.nextInt();

        if (choice == 1)
            {
                draw();
            }
        else if (choice == 2)
            {
                count();
            }
        
    }while(choice!=3);
}

}

Cards 是您的 ArrayList<Deck> 的名称,这意味着有一个“套牌”列表(实际上只是单张牌)。如果您尝试执行类似 Cards.getValue() 的操作,代码并不知道您指的是列表中的哪张卡片。链 Cards.get(index) 的额外步骤在列表中的指定位置获取特定卡,然后您可以对其调用 getValue() 以获取该卡的值。

您的代码有点混乱,因为它并不能真正准确地表示一副纸牌的运作方式。为了更清楚,当前名为 Cards 的列表应该称为 Deck(因为一副纸牌本质上是多张纸牌的列表),而您的 Deck class 应该被命名为 Card,因为它需要一个花色和点数,每张牌都是独一无二的。

这样,您就会得到 List<Card> deck = new ArrayList<Card>(); 之类的东西。正确命名变量确实有助于理解代码中发生的事情。