非常基本的问题,编程新手,但我不知道如何用Java调用参数化构造函数。
我的Card
课程中有以下构造函数:
public Card(int n) {
face = Face.values()[n%13];
suit = Suit.values()[n%4];
}
我试图在我的甲板课上使用它:
public class Deck {
private Card[] deck;
private int nextCard;
public Deck(){
nextCard = 0;
Card crd = new Card();
for(int i = 0; i < 52; i++){
deck[i] = crd.Card(i);
nextCard++;
}
}
}
我应该为牌组的每个成员分配一张来自Card
构造函数的牌。这显然不起作用,如果有人能告诉我原因和做什么,那将非常感激。
您可以像这样调用toString - &gt;
等设置者crd.toString();
或card.setCard(i);
我没有关注如何使用共享类名的参数化构造函数。救命?
我应该在这一部分添加我教授的指示:
Deck
的默认构造函数应该填充52个唯一Card
个对象的数组。使用循环并将循环计数器作为参数传递给Card
构造函数。
答案 0 :(得分:3)
private Card[] deck;
public Deck() {
for(int i = 0; i < 52; i++){
deck[i] = new Card(i);
}
}
当您创建Card的“新”实例时,将执行构造函数。你的构造函数接受一个int参数,所以你需要做的就是调用
Card c = new Card(i);
...其中'i'是一个数字。在您的情况下,您只需将对象直接放入数组中而不保留对它的引用
deck[i] = new Card(i);
我也删除了一些冗余的代码行,这可能会澄清一些事情。
答案 1 :(得分:2)
您需要在for循环中创建一个新的Card对象,而不是尝试重用相同的对象并重新构建它。
for(int i = 0; i < 52; i++){
deck[i] = new Card(i);
nextCard++;
}
如果您对构造函数感到困惑,请阅读有关Oracles网站的文档: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html