Java 错误:教室中的构造函数室不能应用于给定类型

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;

我对java完全陌生。我花了好几个小时寻找这个问题的解决方案,但每个答案都涉及到传递参数或使用空白,而我在这种情况下不会这样做

我有两个java文件,一个用于Room类,一个用于TourHouse类。我正在尝试在TourHouse类中创建一个新房间。这是我的错误,它让我发疯,我已经尝试了我能理解的一切。先谢谢你

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
vs
has-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
}