【问题标题】:Issue with creating an object from a parameterized constructor with an array as a parameter从带有数组作为参数的参数化构造函数创建对象的问题
【发布时间】:2014-11-22 14:55:37
【问题描述】:

我正在为 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();

我在线程“main”java.lang.Error 中遇到异常:未解决的编译问题: 构造函数 DiceArray() 未定义

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

【问题讨论】:

  • 以 int[] 作为参数调用构造函数

标签: java constructor parameterized


【解决方案1】:

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

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

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

并从您的方法中删除 num 数组初始化,因为不建议修改您在方法/构造函数中获得的参数,因为它不会产生任何影响(即它不会更改您在调用之前定义的数组 num 中的任何内容上面的构造函数)在我们上面定义的调用方法上。

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

所以只需删除构造函数及其主体,它应该可以工作。

【讨论】:

  • 哦,我明白了。我会做一段时间,看看我能不能解决它。感谢您的帮助。
【解决方案2】:

你试过了,

DiceArray myDice = new DiceArray();

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

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

当你创建一个参数化的构造函数时,不会生成默认的,而sunysen的意思是要么创建一个默认的构造函数,要么使用参数化的构造函数来创建你的对象。

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

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

【讨论】:

    【解决方案3】:

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

    public DiceArray() {
      ...
    }   
    

    或者你可以使用参数:

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

    【讨论】:

    • 我想我正在按照您的演示进行尝试。如果我已经实例化了变量,int[] num = new int[5] 是否仍然适用?我仍然想出同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多