使用另一个类的构造函数向数组列表添加值,错误消息

时间:2014-10-28 17:15:53

标签: java

我收到错误消息,指出无法找到符号,它指的是cards.add(new Card(Suit.SPADES,i));上方的粗体区域。

我在'卡中有以下构造函数。类:

Card(Suit suit, int rank) {
    this.suit = suit;
    this.rank = rank; 
}

我已在该课程中声明了一些枚举:

public enum Suit {
    SPADES, HEARTS, CLUBS,DIAMONDS 
}

deck类是我添加到ArrayList的地方。

ArrayList cards = new ArrayList(52);
Deck() {
    //ArrayList cards = new ArrayList(52);
    for (int i=0; i<=13; i++){  
    cards.add(new Card(Suit.SPADES,i));
    }
}

3 个答案:

答案 0 :(得分:0)

似乎Suit嵌套在Card类中,因此在Card类之外,您需要使用Card.Suit.SPADES或其他类似的内容。

答案 1 :(得分:0)

根据您的说明,似乎SuitCard中的内部枚举。在代码中:

public class Card {
    public enum Suit {
        //...
    }
}

如果将其移动到单独的文件中然后在Deck类中正确导入它会更好:

Card.java

public class Card {
    //...
}

Suit.java

public enum Suit {
    //...
}

Deck.java

public class Deck {
    //...
}

答案 2 :(得分:0)

您的问题是您没有为构造函数指定访问修饰符。

如果您的类Deck与Card不同,那么您无法访问其构造函数,因为默认情况下它将具有protected修饰符。这意味着,无法从包外部调用该构造函数。

你的代码

Card(Suit suit, int rank) {
        this.suit = suit;
        this.rank = rank;
}

相当于

protected Card(Suit suit, int rank) {
        this.suit = suit;
        this.rank = rank;
}

但是,如果您要更改下面的修饰符

package cards;


public class Card {

    private final Suit suit;
    private final int rank;

    public Card(Suit suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public enum Suit {

        SPADES, HEARTS, CLUBS, DIAMONDS
    }
}

package dectks;

import cards.Card;
import cards.Card.Suit;
import java.util.ArrayList;
import java.util.List;

public class Deck {

    List<Card> cards = new ArrayList<>(52);

    Deck() {
        for (int i = 0; i <= 13; i++) {
            cards.add(new Card(Suit.SPADES, i));
        }
    }

    public static void main(String[] args) {
        Deck deck = new Deck();
    }
}

它将开始起作用。

结论:不要忘记设置访问修饰符,如果没有必要,不要依赖默认值。

P.S。我还将你的汽车收藏重新定义为List<Card> cards = new ArrayList<>(52);,因为它应该完成。