我正在尝试在名为TextGame的另一个类中创建和使用名为Room的类的多个实例。 TextGame类有一个名为numRooms的实例变量,循环的布尔表达式以该实例变量结束。我遇到的唯一问题是循环创建了一个与最后一个对象同名的对象。我不确定是否会覆盖对象,导致循环结束时只有一个对象。
以下是包含循环的方法:
public void makeRooms(){
Scanner keyboard = new Scanner(System.in);
for(int i = 0; i < numRooms; i++){
System.out.println("What riddle do you want in Room " + (i+1) + "?");
String riddle = keyboard.nextLine();
System.out.println("What is the answer for that riddle?");
String answer = keyboard.nextLine();
Room room = new Room(riddle, answer);
}
}
有没有办法可以根据每次迭代时i的值命名Room对象?
答案 0 :(得分:1)
解决方案是使用简单的数组。在这种情况下,这可以更容易,因为您知道房间的数量。
Room[] roomArray=new Room[numRooms]; //This happens outside the for loop
然后在for循环中,将以Room room=new Room(
...开头的行更改为:
room[i]=new Room(riddle, answer);
请注意,你的循环必须以0开头,它就在这里。
另一个解决方案是使用ArrayList。如果您不知道要添加多少房间,这会更难,但更灵活。
ArrayList<Room> rooms=new ArrayList<>(); //The brackets refer to generics
然后,在你的for循环中,添加:
rooms.add(room);
答案 1 :(得分:1)
您必须将您的房间添加到Collection
,可以是List<Room>
,或者您可以在java Map <Key,Value>
中使用字典,其中密钥是房间数。