使用数组作为参数从参数化构造函数创建对象的问题

时间:2014-11-22 14:55:37

标签: java constructor parameterized

我正在为Yahtzee游戏开发Java项目,需要创建一个参数化构造函数,为我的两个实例变量赋值。我的两个实例变量是数组。

    public DiceArray(int[] die)
{
    die = new int[5];
    for( int i = 0; i < die.length; i++ )
    {
        die[i] = 0;
    }

    keep = new boolean[5];
    for( int i = 0; i < keep.length; i++ )
    {
        keep[i] = false;
    }       
}

当我尝试使用

在我的应用程序类中创建对象时
    // Testing parameterized constructor
    DiceArray myDice = new DiceArray();

我在线程&#34; main&#34;中得到了Exception。 java.lang.Error:未解决的编译问题:     构造函数DiceArray()未定义

当我从方法中取出参数时,它工作正常。在此先感谢您的任何帮助

3 个答案:

答案 0 :(得分:0)

您已将构造函数定义为采用一个参数,但您尝试使用零参数调用它。因此,您可以从构造函数定义中删除参数:

public DiceArray() {
  ...
}   

或者您可以使用参数:

int[] num = new int[5];

DiceArray myDice = new DiceArray(num);

答案 1 :(得分:0)

您还没有定义默认构造函数,并且您正在尝试调用默认构造函数,这就是编译器不满意的原因。

你需要在你的情况下使用参数化构造函数,如:

int num[] = new int[5];
DiceArray myDice = new DiceArray(num);

从你的方法中删除num数组初始化,因为不建议修改你在方法/构造函数中得到的参数,因为它不会产生任何影响(即它不会改变你在调用之前定义的数组中的任何内容如上所述的调用方法上的构造函数。

事实上,我认为你根本不应该使用构造函数。 (假设你已经在对象级别声明了num和result数组)默认情况下,当你创建int数组时,默认情况下所有的值都是0,对于结果,即布尔数组,它们将默认为false。

所以只需删除构造函数及其正文,它就可以工作。

答案 2 :(得分:0)

你尝试了什么,

DiceArray myDice = new DiceArray();

使用默认构造函数实例化myDice。来自Wikipedia

  

在Java和C#中,一个&#34;默认构造函数&#34;指的是一个无效的   如果没有,编译器自动生成的构造函数   已经为类定义了构造函数。默认构造函数   也是空的,这意味着它什么都不做。程序员定义的   不带参数的构造函数也称为默认值   构造

创建参数化构造函数时,不会生成默认构造函数,而sunysen所说的是创建默认构造函数,或者使用参数化构造函数创建对象。

请注意另一个错误,因为您声明 die keep 是您的实例变量,构造函数中的 die 更改将无效在实例变量上,因为它被同名构造函数中的变量遮蔽。要解决此问题,请在关键字

前加上前缀
public DiceArray(int[] die)
{
    this.die = new int[5];
    ...
}