我收到错误消息,指出无法找到符号,它指的是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));
}
}
答案 0 :(得分:0)
似乎Suit
嵌套在Card
类中,因此在Card
类之外,您需要使用Card.Suit.SPADES
或其他类似的内容。
答案 1 :(得分:0)
根据您的说明,似乎Suit
是Card
中的内部枚举。在代码中:
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);
,因为它应该完成。