我对java完全陌生。我已经搜索了好几个小时来寻找这个问题的解决方案,但每个答案都涉及传递args或使用void,而在这种情况下我不会这样做。
我有两个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";
}
}
这是HouseTour级
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 tourn";
String output2 = output + rooms.toString() + "n";
return output2;
}
}
}
编辑:已解决,但仍需要帮助,因为我已完成n00b,:(
// this is horrible and not right
public String rooms( )
{
output = "House Rooms included in tourn";
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?
}
}
我正在做的是尝试通过转换我创建的ruby项目来学习java。所以在ruby中你说:
def rooms
output = "House Rooms included in tourn"
@rooms.each do |r|
output += r.to_s + "n"
end
return output
end
编辑:还在尝试,有什么想法吗添加了公共字符串s;和公共字符串输出;到声明
// this is horrible and not right
public String rooms( )
{
s = ""
output = "House Rooms included in tourn";
for (int i = 0; i <=7; i++)
{
s += rooms[i];
}
s.toString() // I don't know
return output + s; // do I do this?
}
}
编辑:由于悬停飞机上布满鳗鱼而解决
啊,我看到你的问题了:HouseTour扩展了Room。不要这样!HouseTour不是房间类型的更具体的情况,因此不应扩展此类。它不符合"is-a"规则,类似于试图将Bus定义为SchoolKid的儿童班。就像巴士不是学童的一种,而是包含学童一样,HouseTour也不是房间,而是包含房间。它满足has-a关系,而不是is-a的关系。
如果在这种情况下继承是正确的,那么HouseTour构造函数将需要调用Room超级构造函数并传入两个String参数:
// Don't do this!!!
public class HouseTour extends Room {
public HouseTour() {
super("foo", "bar");
....
}
但话虽如此,再次强调,继承在这里是不合适的——只要去掉extends Room
,你就可以自由回家了。
例如
public class HouseTour { // no extends!
private Room[] rooms; // has-a not is-a
public HouseTour() {
// don't call super here
}
此外,根据我的评论,这将给你带来丑陋的输出:rooms.toString()
相反,遍历数组并从数组中的每个Room项中获得toString()结果。
编辑
关于您房间的建议()方法:
- 在循环之前创建一个String或StringBuilder
- 在循环内部构建String或StringBuilder
- 在循环之后返回String或StringBuilder#toString
- 在循环内部,从列表中的当前Room项获取toString()
- 在调用方法之前,您需要检查rooms[i]项是否为null
编辑2
您声明:
public String rooms( )
{
output = "House Rooms included in tourn";
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 tourn";
// 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
}