尝试将自定义对象添加到ArrayList。输出是胡言乱语

时间:2016-02-09 17:13:50

标签: java arraylist methods

 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$

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

编辑:在添加卡时想出更改语法但是当我运行它时输出是giberish,有人知道如何修复它吗?

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

新代码^

由于

4 个答案:

答案 0 :(得分:3)

更改此行:

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

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

答案 1 :(得分:1)

问题1

将实际的Card对象添加到ArrayList<Card>而不是String。

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

问题2

  

输出是乱码

您需要为toString

实施Card方法
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 + '\'' +
                '}';
    }
}

答案 2 :(得分:0)

deckOfCards.add(i+1, suit[j]);// Change this to ....

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

答案 3 :(得分:0)

卡不能成为一种方法。方法是动作,类是名词。

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

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

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