在Java中调用参数化构造函数

时间:2016-06-25 14:26:54

标签: java constructor

非常基本的问题,编程新手,但我不知道如何用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构造函数。

2 个答案:

答案 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