Java 使用数组作为参数从参数化构造函数创建对象时出现问题

Java 使用数组作为参数从参数化构造函数创建对象时出现问题,java,constructor,parameterized,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

我正在为一个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;
    }       
}
线程“main”java.lang中出现异常。错误:未解决的编译问题: 构造函数DiceArray()未定义


当我从方法中取出参数时,它工作得很好。提前感谢您的帮助

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

public DiceArray() {
  ...
}   
也可以使用以下参数:

int[] num = new int[5];

DiceArray myDice = new DiceArray(num);

您尚未定义默认构造函数,并且正在尝试调用默认构造函数,这就是编译器不高兴的原因

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

int num[] = new int[5];
DiceArray myDice = new DiceArray(num);
并从方法中删除num数组初始化,因为不建议修改方法/构造函数中的参数,因为它不会对调用方法产生任何影响(即,它不会更改您刚才在调用构造函数之前定义的数组num中的任何内容),就像我们上面定义的那样

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

因此,只要删除构造函数及其主体,它就应该可以工作。

您所尝试的

DiceArray myDice = new DiceArray();
正在使用默认构造函数安装myDice。从

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

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

请注意另一个错误,因为您声明die和keep是您的实例变量,所以构造函数中的die更改对实例变量没有影响,因为它被同名构造函数中的变量隐藏。若要修复此问题,请在this关键字前面加前缀


用int[]作为参数调用构造函数。我想我正在按照你告诉我的那样进行尝试。如果我已经实例化了变量,int[]num=new int[5]还会应用吗?我还是犯了同样的错误。哦,我明白这是有道理的。我会考虑一下,看看能不能解决。谢谢你的帮助。
DiceArray myDice = new DiceArray();
public DiceArray(int[] die)
{
    this.die = new int[5];
    ...
}