【问题标题】:I don't understand how this line works: "System.out.println("\nCard: " + Deck.get(number).getValue() + " of " + Deck.get(number).getSuit() );"我不明白这一行是如何工作的: "System.out.println("\nCard: " + Deck.get(number).getValue() + " of " + Deck.get(number).getSuit() ); "
【发布时间】:2021-09-10 04:43:57
【问题描述】:

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

附言

  • 向所有由于缺乏明确性而认为这篇文章过于简单或乏味的人表示歉意。这是我第一次发帖,我就是我的用户名所暗示的。

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

公共类卡片{

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

}

【问题讨论】:

  • 我会认为很多牌都放在一个牌组中,而不是相反。但无论如何要回答你的问题Card 是一个ArrayList。 ArrayList 是类似对象的集合,例如一个学生教室,一个图书馆等。当您致电get 时,您将返回一个对象(甲板),然后您要求它的价值。回到图书馆的例子,当你想要一本书的标题时,你不会想要图书馆的标题。

标签: java arrays arraylist chaining chain


【解决方案1】:

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

您的代码有点令人困惑,因为它并不能真正准确地表示一副纸牌的工作方式。为了更清楚起见,当前名为Cards 的列表应称为Deck(因为一副纸牌本质上是多张纸牌的列表),您的Deck 类应命名为Card,因为它需要一个单一的花色和价值,每张牌都是独一无二的。

这样,您将拥有类似List&lt;Card&gt; deck = new ArrayList&lt;Card&gt;(); 的内容。正确命名变量确实有助于理解代码中发生了什么。

【讨论】:

  • getValue()如何从get(index)接收索引号?链接时,收到的上一个值是否会自动发送到下一个方法?因为值需要输入括号对吗?例如:“.getValue(Card)” 如果我的问题听起来很愚蠢,我很抱歉。我还在学习基础知识。
  • 每次调用方法时,该调用都会返回该方法的返回值。在这种情况下,当您在列表上调用get() 时,它会返回列表中指定位置的对象。因此,当您在 Card 类型的列表上使用 get() 时,您将获得一个 Card 对象。然后,您可以调用该对象具有的任何方法,例如getValue()。将String val = Deck.get(0).getValue() 视为编写这两行的更短的方式:Card c = Deck.get(0);(获取牌组中的第一张牌)和String val = c.getValue()(获取那张牌的价值)。
  • 这是我一直在寻找的答案。现在对我来说很有意义,非常感谢!
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2014-09-17
  • 2012-02-07
相关资源
最近更新 更多