【问题标题】:Trying to add custom object to ArrayList. Output is gibberish尝试将自定义对象添加到 ArrayList。输出乱码
【发布时间】:2016-02-09 17:13:49
【问题描述】:
 import java.util.ArrayList;

public class Card {

  int number;
  String suit;

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

  public static void main(String[] args) {

    String[] suit = {
      "Clubs",
      "Diamonds",
      "Spades",
      "Hearts"
    };

    ArrayList<Card> deckOfCards = new ArrayList<Card>(52);

    for (int j = 0; j < 4; j++) {
      for (int i = 0; i < 13; i++) {

        deckOfCards.add(i+1, suit[j]);
      }
    }


    System.out.println(deckOfCards);
  }
}

我是方法的新手,我们需要创建一副卡片,其中卡片是方法而不是字符串或 int 等(假设方法卡片是卡片)。不是 100% 确定我做错了什么,但我不断收到错误:

Card.java:27: error: no suitable method found for add(int,String)
        deckOfCards.add(i+1, suit[j]);
                   ^
    method List.add(int,Card) is not applicable
      (argument mismatch; String cannot be converted to Card)
    method AbstractList.add(int,Card) is not applicable
      (argument mismatch; String cannot be converted to Card)
    method ArrayList.add(int,Card) is not applicable
      (argument mismatch; String cannot be converted to Card)
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error
Michaels-MacBook-Air-2:Computer Science michaelzakariaie$

非常感谢任何提示/帮助,我很确定这是一个简单的错误,我只是空白

编辑:想办法在添加卡时更改语法,但运行时输出乱码,有人知道如何解决吗?

import java.util.ArrayList;

public class Card {

  int number;
  String suit;

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

  public static void main(String[] args) {

    String[] suit = {
      "Clubs",
      "Diamonds",
      "Spades",
      "Hearts"
    };

    ArrayList<Card> deckOfCards = new ArrayList<Card>(52);

    for (int j = 0; j < 4; j++) {
      for (int i = 0; i < 13; i++) {

        deckOfCards.add(new Card (i+1, suit[j]));
      }
    }

    //  deckOfCards.add(new Card (1, "hi"));

    System.out.println(deckOfCards);
  }
}

新代码^

谢谢

【问题讨论】:

  • 正如错误告诉您的那样,您正试图在 Card 对象的 ArrayList 中插入一个 String 对象。

标签: java arraylist methods


【解决方案1】:

改变这一行:

deckOfCards.add(i+1, suit[j]);

到这里:

deckOfCards.add(new Card(i+1, suit[j]));

或者这个:

Card current = new Card(i+1, suit[j]);
deckOfCards.add(current);

我可能会这样做,因为将每个操作放在自己的行中(即创建卡片然后添加它)更容易阅读。它也更容易调试 - 在第一个选项中,如果您在该行有错误,您无法确定它是否与创建卡或添加它有关。

【讨论】:

  • 你应该向 OP 解释差异
【解决方案2】:

问题 1

将实际的 Card 对象添加到 ArrayList&lt;Card&gt; 而不是字符串。

deckOfCards.add(new Card(i+1, suit[j]));

问题 2

输出是乱码

你需要为Card实现一个toString方法

public class Card {

    int number;
    String suit;

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


    @Override
    public String toString() {
        return "Card{" +
                "number=" + number +
                ", suit='" + suit + '\'' +
                '}';
    }
}

【讨论】:

    【解决方案3】:
    deckOfCards.add(i+1, suit[j]);// Change this to ....
    
    deckOfCards.add(i+1, new Card(i+1,suit[j]));
    

    【讨论】:

      【解决方案4】:

      卡片不能是方法。方法是动作,类是名词。

      在您的示例中,您有一个 Card 类。实例化一张卡片并将其添加到数组列表中。

      Card card = new Card(i+1, suit[j])
      

      ArrayList 使用尖括号 表示的泛型。泛型类型指定它包含 Card 类型的对象。您不能将 String 类型的 Object 插入到该列表中。

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 2016-01-05
        • 1970-01-01
        • 2020-03-05
        • 2012-11-02
        • 2020-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多