Java “错误:类Hal9000中的构造函数Hal9000不能应用于给定类型;”
您好,我正在完成一项任务,我们正在创建一个Hal9000。我创建了以下代码:Java “错误:类Hal9000中的构造函数Hal9000不能应用于给定类型;”,java,Java,您好,我正在完成一项任务,我们正在创建一个Hal9000。我创建了以下代码: /** * Hal9000 simulate an AI that interacts with the crew * of a space ship. * */ public class Hal9000 { private String name; /** * @return returns the name of the crew member. */ publ
/**
* Hal9000 simulate an AI that interacts with the crew
* of a space ship.
*
*/
public class Hal9000
{
private String name;
/**
* @return returns the name of the crew member.
*/
public String getName()
{ return name;
}
/**
* Sets a new crew name @param for the crew member
*/
public void setName(String newName)
{ String name = newName;
}
/**
* Hal greets the crew member.
*/
public String greetCrewMember()
{ return "Welcome," + name;
}
/**
* @return returns a string consisting of "I am sorry,name, I can't + whatToDo"
* where name is the crew member's name.
*/
public String doCommand(String whatToDo)
{ return "I am sorry,"+ name + ". I can't" +whatToDo;
}
}
还有一个类测试代码;但当我将代码提交到老师的代码检查器时,我无法编辑此代码
public class Hal9000Tester
{
public static void main(String[] args)
{
Hal9000 hal = new Hal9000("Dave");
System.out.println(hal.greetCrewMember());
System.out.println("Expected: Welcome, Dave");
System.out.println(hal.doCommand("engage drive"));
System.out.println("Expected: I am sorry, Dave. I can't engage drive");
hal.setName("Aruna");
System.out.println(hal.doCommand("power down"));
System.out.println("Expected: I am sorry, Aruna. I can't power down");
}
}
对于第一个代码,我得到一个错误:
/tmp/codecheck/170917232824903863465653579553/submission/Hal9000Tester.java:5:错误:类Hal9000中的构造函数Hal9000不能应用于给定类型
Hal9000 hal = new Hal9000("Dave");
^
必需:无参数
找到:字符串
原因:实际参数列表和正式参数列表长度不同
1错误
由于我对编码非常陌生,这是我的第一门课程,我不确定问题是什么以及如何解决它。感谢您的阅读,希望您能帮助我。您的类需要一个构造函数。当Hal9000Tester使用新的Hal9000Dave时,它会在类Hal9000中查找名为Hal9000的方法,该方法将字符串作为其参数 默认情况下,未声明构造函数的类将获得编译器添加的构造函数方法。添加的构造函数不接受任何参数,这就是导致错误的原因 您需要以下内容:
public class Hal9000 {
// ...
public Hal9000(String nameOfCrewMember){
this.setName(nameOfCrewMember);
}
// ...
}
另外,您的setName实际上并没有设置机组成员的姓名。它只是创建一个局部变量
你需要像这样的东西:
public void setName(String newName){
this.name = newName;
}
有关构造函数的一些信息[此处]java文档。您的问题是,您正在尝试创建对象的实例,但尚未使用正确的参数设置构造函数
public Hal9000(String name)
{
setName(name);
}
此添加将允许您的代码运行。我建议在尝试编写太多代码之前,多了解面向对象编程的工作原理。Javadocs为此提供了很好的资源。请注意,您可能需要return Welcome,+在末尾指定一个空格,而不是return Welcome,+name。我也一样,对不起,我不能。