主方法构造函数未正确应用

时间:2018-02-03 20:28:42

标签: java

我很难实现我的主要课程以正常工作。我收到编译错误,说“constructor inc1 in class inc1 cannot be applied to given types;”,并说“required: inc1_dice,inc1_player”。我相当肯定它与inc1类中的构造函数具有“(inc1_dice dice, inc1_player player)”的事实有关,但我无法弄清楚如何调整我的主类来解决问题。

如果有人知道该怎么做,请告诉我,我会非常感激!

主要课程:

public class inc1_main
{
    public static void main(String[] args)
    {
        inc1 inc = new inc1();
        inc.go();
    }
}

Play类的一部分:

public class inc1{
  private inc1_player player;
  private inc1_dice dice;

  public inc1(inc1_dice dice, inc1_player player){
     this.dice = dice;
     this.player = player;
  }

5 个答案:

答案 0 :(得分:0)

你的inc1类中的构造函数中包含参数。一旦创建了包含参数的构造函数,Java编译器就不会自动为您生成默认构造函数。 (这是一个不带参数参数的构造函数)

所以你试图调用的inc1构造函数,取两个参数。所以在你的主类中,你需要创建一个inc1_dice和一个inc1_player对象,设置它们,然后将它们传递给你的构造函数。

答案 1 :(得分:0)

而不是 inc1 inc = new inc1();

你需要一些东西

inc1 inc = new inc1(dice, player);

其中diceinc1_dice的实例,而playerinc1_player的实例。或者,将默认构造函数添加到类inc1

答案 2 :(得分:0)

类名应以大写字母开头,它是Java惯例。 因此,您的类是 Inc1_main Inc1 。如果您遵循标准指南(至少大多数指南)将帮助任何检查您的代码的人。

关于您的问题,当您调用构造函数时,您必须传递2个参数,因为您已在类代码中指定了它们。所以代码 new inc1()应该更改为 new Inc1(a,b),其中 a b Inc1_dice Inc1_player 的实例。

答案 3 :(得分:0)

您声明类inc1的构造函数需要两个参数来创建此类的实例:

inc1(inc1_dice dice, inc1_player player) {...}

并且您没有提供不带参数的构造函数:

inc1() {...}

这意味着您无法使用 默认构造函数 (构造函数不带参数)创建inc1的实例。原因是,如果您声明自己的构造函数,则无法使用默认构造函数创建类的实例,除非您提供自己的构造函数不带参数。

总结我所说的内容,您需要首先按照您声明的方式创建inc1_diceinc1_player的实例),或者“随时随地”创建这些类的实例:

inc1_dice dice = new inc1_dice();
inc1_player player = new inc1_player();
inc1 myObject = new inc1(dice, player);

或第二种方式:

inc1 myObject = new inc1(new inc1_dice(), new inc1_player());

另一种可能性是在inc1类中准备你自己的构造函数,它不带任何参数:

public class inc1{
    private inc1_player player;
    private inc1_dice dice;

    public inc1(inc1_dice dice, inc1_player player){
       this.dice = dice;
       this.player = player;
    }

    public inc1() {
        // here are actions you want to perform when constructor
        // taking no arguments is called...
    }
}

顺便说一下,遵循Java命名约定是好的 - 他们说你应该用大写字母(例如Inc1,Inc1Dice等)命名Java类

答案 4 :(得分:-1)

在Java中,每个类默认都有一个默认的ctor - 一个不接收args的。

当你创建一个接收args的ctor时,你不能再期望在没有args的情况下调用一个ctor,直到你定义一个。

因此,在你的main()中,你应该调用

    inc1 inc = new inc1(-args-);

或者,创建一个不接受args的新ctor。

希望有帮助...