Java 错误:教室中的构造函数室不能应用于给定类型
我对java完全陌生。我花了好几个小时寻找这个问题的解决方案,但每个答案都涉及到传递参数或使用空白,而我在这种情况下不会这样做 我有两个java文件,一个用于Room类,一个用于TourHouse类。我正在尝试在TourHouse类中创建一个新房间。这是我的错误,它让我发疯,我已经尝试了我能理解的一切。先谢谢你Java 错误:教室中的构造函数室不能应用于给定类型,java,inheritance,Java,Inheritance,我对java完全陌生。我花了好几个小时寻找这个问题的解决方案,但每个答案都涉及到传递参数或使用空白,而我在这种情况下不会这样做 我有两个java文件,一个用于Room类,一个用于TourHouse类。我正在尝试在TourHouse类中创建一个新房间。这是我的错误,它让我发疯,我已经尝试了我能理解的一切。先谢谢你 HouseTour.java:15: error: constructor Room in class Room cannot be applied to given types;
HouseTour.java:15: error: constructor Room in class Room cannot be applied to given
types;
{
^
required: String, String
found: no arguments
reason: actual and formal arguments differ in length
这是房间类,一旦我能弄清楚,总共有7个房间
// Room.java
import java.util.*;
public class Room
{
// Define Instance Variables
private String name;
private String description;
// Define Constructor
public Room(String theName, String theDescription)
{
name = theName;
description = theDescription;
}
public String toString( )
{
return "The " + name + "\n" + description + "\n";
}
}
这是家庭旅游课
import java.util.*;
public class HouseTour extends Room
{
// Define Variables
public Room[ ] rooms = new Room[7];
//Define Constructor
public HouseTour( )
{
rooms[0] = new Room("Living Room", "Mayonnaise and Brill Grates, Michaelsoft");
rooms[1] = new Room("Basement", "Hopefully no dead bodies down here...");
}
// this is horrible and not right
public String rooms( )
{
for (int i = 0; i <=7; i++)
{
String output = "House Rooms included in tour\n";
String output2 = output + rooms.toString() + "\n";
return output2;
}
}
}
编辑:仍在尝试,有什么想法吗? 添加了公共字符串s;和公共字符串输出;声明
// this is horrible and not right
public String rooms( )
{
s = ""
output = "House Rooms included in tour\n";
for (int i = 0; i <=7; i++)
{
s += rooms[i];
}
s.toString() // I don't know
return output + s; // do I do this?
}
}
//这太可怕了,而且不对
公共弦乐室()
{
s=“”
output=“巡视中包含的房间\n”;
对于(int i=0;i啊,我看到了你的问题:HouseTour扩展了房间。不要这样做!HouseTour不是房间类型的更具体的案例,因此不应该扩展这个类。它不满足“is-a”规则,这类似于试图将公交车定义为小学生的子类。就像公交车不是一种小学生而是包含小学生一样,HouseTour不是房间而是包含房间。它满足了has-a关系,而不是is-a关系
如果在这种情况下继承是正确的,那么HouseTour构造函数将需要调用Room super构造函数并传入两个字符串参数:
// Don't do this!!!
public class HouseTour extends Room {
public HouseTour() {
super("foo", "bar");
....
}
但是话说回来,继承在这里是不合适的——只要去掉扩展空间
,你就可以自由回家了
e、 g
另外,根据我的评论,这将给您带来难看的输出:rooms.toString()
相反,遍历数组并从数组中的每个房间项获取toString()结果
编辑
对rooms()方法的建议:
- 在循环之前创建字符串或StringBuilder
- 在循环内部构建字符串或StringBuilder
- 在循环后返回字符串或StringBuilder#toString
- 在循环内部,从列表中的当前文件室项获取toString()
- 在对其调用方法之前,您需要检查rooms[i]项是否为null
编辑2
您声明:
public String rooms( )
{
output = "House Rooms included in tour\n";
for (int i = 0; i <=7; i++)
{
output += rooms[i]; // I can't do this but how do i?
}
return output.toString(); // do I do this?
}
公共字符串室()
{
output=“巡视中包含的房间\n”;
对于(inti=0;i),这将为您提供丑陋的输出:rooms.toString()
,但我看不到你的错误。哪一行代码出现了错误,因为我在上面看不到?是的,我正在努力处理输出,仍在学习,我认为这会起作用,但可惜没有哇,这就是我学习的方式,真的很糟糕,完全被误解了,非常感谢你,我的意思是我花了4个小时试图修复它,是吗AtourProblems?@thewrp:没问题。请记住is-a
vshas-a
的区别。HouseTours有房间对象,但不满足is-a房间对象。你有没有机会详细说明我在publc字符串()中的错误rooms方法?我刚刚尝试编译并意识到这根本不起作用。啊,我是个白痴,谢谢你的帮助,所以创建字符串s=”“运行循环s+=rooms+“\n”;结束循环返回s;@thewrp:差不多。不是rooms+“\n”--你需要数组索引来获取rooms所持有的第I个Room项。另外,避免使用“幻数”,例如
// Don't do this!!!
public class HouseTour extends Room {
public HouseTour() {
super("foo", "bar");
....
}
public class HouseTour { // no extends!
private Room[] rooms; // has-a not is-a
public HouseTour() {
// don't call super here
}
public String rooms( )
{
output = "House Rooms included in tour\n";
for (int i = 0; i <=7; i++)
{
output += rooms[i]; // I can't do this but how do i?
}
return output.toString(); // do I do this?
}
public String rooms( ) {
// declare your String locally, not globally in the class
String output = "House Rooms included in tour\n";
// again, avoid using "magic" numbers like 7
for (int i = 0; i < rooms.length; i++) {
output += rooms[i].toString(); // **** you must extract Room's String
}
return output; // no need to call toString() on a String
}