Java 未正确应用主方法构造函数
我很难实施我的主要课程来正常工作。我收到一个编译器错误,它说“Java 未正确应用主方法构造函数,java,Java,我很难实施我的主要课程来正常工作。我收到一个编译器错误,它说“类inc1中的构造函数inc1不能应用于给定的类型;”,它说“必需:inc1\u dice,inc1\u player”。我相当确定这与inc1类中的构造函数具有“(inc1\u dice dice,inc1\u player)”这一事实有关,但我不知道如何调整我的主类来解决这个问题 如果有人知道怎么做,请让我知道,我将非常感谢 主要类别: public class inc1_main { public static void
类inc1中的构造函数inc1不能应用于给定的类型;
”,它说“必需:inc1\u dice,inc1\u player
”。我相当确定这与inc1
类中的构造函数具有“(inc1\u dice dice,inc1\u player)
”这一事实有关,但我不知道如何调整我的主类来解决这个问题
如果有人知道怎么做,请让我知道,我将非常感谢
主要类别:
public class inc1_main
{
public static void main(String[] args)
{
inc1 inc = new inc1();
inc.go();
}
}
游戏课的一部分:
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;
}
在Java中,默认情况下,每个类都有一个默认的ctor,该ctor不接收任何参数 当您创建了一个接收参数的ctor时,在您定义一个参数之前,您再也不能期望调用一个没有参数的ctor了 因此,在main()中,应该调用
inc1 inc = new inc1(-args-);
或者,创建一个不接收参数的新ctor
希望这对…有所帮助。您的inc1类中的构造函数中有参数。一旦创建了包含参数的构造函数,Java编译器将不会自动为您生成默认构造函数。(这是一个不接受参数参数的构造函数) 所以你要调用的inc1构造函数,有两个参数。因此,在主类中,您需要创建一个inc1_骰子和一个inc1_玩家对象,设置它们,然后将它们传递给构造函数。而不是
inc1 inc=new inc1()代码>
你需要一些类似的东西
inc1 inc=新的inc1(骰子,玩家)代码>
其中,dice
是inc1\u dice
的实例,player
是inc1\u player
的实例。或者,将默认构造函数添加到类inc1
类名称应以大写字母开头,这是Java约定。
因此,您的类是Inc1_main和Inc1。如果您遵循标准准则(至少大多数准则),将有助于检查代码的任何人
关于您的问题,当您调用构造函数时,必须传递2个参数,因为您已经在类代码中指定了它们。因此,代码new inc1()应该更改为new inc1(a,b),其中a和b是inc1_dice和inc1_player的实例。您声明类的构造函数inc1
需要两个参数来创建该类的实例:
inc1(inc1_骰子,inc1_玩家){…}
您没有提供自己的构造函数,不带任何参数:
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...
}
}
这意味着您不能使用默认构造函数(构造函数不带参数)创建inc1
的实例。原因是,如果您声明自己的构造函数,则无法使用默认构造函数创建类的实例,除非您提供自己的构造函数,且不带任何参数
总结一下我所说的,您需要首先创建inc1_dice
和inc1_player
的实例,以您声明的方式创建它们),或者“在运行中”创建这些类的实例:
或者第二种方式:
inc1 myObject = new inc1(new inc1_dice(), new inc1_player());
另一种可能性是在inc1
类中准备自己的构造函数,该类不带任何参数:
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命名约定是很好的——他们说应该用Java命名以大写字母开头的类(例如Inc1、Inc1Dice等)如果一个方法(包括构造函数)被声明为使用参数,那么在调用它时必须提供它们new inc1()
没有传递任何参数,因此会出现一个编译错误,告诉您需要添加什么(inc1_骰子和inc1_播放器)。@azurefrog好的,所以我将inc1_骰子、inc1_播放器添加到inc1 inc=new inc1();总的来说,它说找不到symbolWell,这是一个不同的问题。(另外,请不要问这个问题,直到你在谷歌上搜索了错误信息,至少阅读了规范的SO答案)当我这样做时(骰子,玩家),它说它找不到骰子和玩家symbols@destinycoots因为您必须在调用之前实例化它们。类似于inc1_dice dice=newinc1_dice();inc1_播放器=新的inc1_播放器()代码>当然假设你写了类inc1\u dice
和inc1\u player
。是的,我有它的类,我已经弄明白了。现在,当我运行main时,我得到了“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”知道这意味着什么吗?@destinycoots这意味着你的程序内存不足。例如,当您创建一个非常大的数组时,就会发生这种情况。仔细检查您的代码,您没有向我们展示go()
方法的主体,也没有展示类inc1\u dice
和inc1\u player
。我创建了另一个问题来处理这个问题,因为我无法解决它。如果你愿意,请随意查看我的所有代码!好的,我现在已经解决了所有问题,没有编译器错误。但是当我运行main时,我得到了“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”知道这意味着什么吗?@DestinyCoots查看go()方法的代码(您的问题中没有包含该方法,而且您似乎需要在那里查找一个bug—它似乎不断地执行某种操作,直到内存不足时才会停止—但我们无法确定存在哪种bug,因为我们没有看到)。是的,这是一个无限的while循环。我已经完成了所有需要完成的方法,我只需要正确地组织它们,以使我的go方法工作。如果我想不出来,我会在另一个问题中解决kit,但感谢你在主要方面的帮助,并指出我的问题是go方法!@DestinyCoots很高兴我能祝你好运!好吧,我现在得到了编译器错误,但是当我运行时,我得到了“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”知道这意味着什么吗?它是构造函数,不是构造函数