2013-03-12 1 views
1

В настоящее время я выполняю задание, где у меня есть два класса Room and House. В рамках задания мне нужно для того, чтобы класс дома хранить номера в ArrayList:Как реализовать ArrayList для добавления объектов «Комнаты» в список объектов «Дом»?

Реализовать метод для чтения в информации номер в House класса с клавиатуры - это должно вызвать Room конструктор по мере необходимости , Создайте конструктор House с нулевым аргументом, чтобы вызвать этот новый метод.

Прошу прощения, если это неясно или ответили в другом месте, но, пытаясь понять объяснения по другим подобным запросам, я не знаю, как применить их к моей ситуации.

Как подать заявку ArrayList от Room к классу дома?

House:

import java.util.ArrayList; 
import java.util.Scanner; 

public class House { 

private int idNum; 
private static int internalCount = 0; 
private ArrayList rooms = new ArrayList(); 
private String address; 
private int numRooms; 
private String houseType; 

public House (String address, int numRooms, String houseType) { 
idNum = internalCount++; 

this.address = address; 
this.numRooms = numRooms; 
this.houseType = houseType;  
} 


public House() { 
int i = 0; 
idNum = ++internalCount; 

Scanner scan = new Scanner(System.in); 
scan.useDelimiter("\n"); 

System.out.println("Enter address of house:"); 
address = scan.next(); 

System.out.println("Enter number of rooms:"); //Number of rooms in the House 
numRooms = scan.nextInt(); 

while (i < numRooms) //This will loop until all rooms have been described 
{ 
add.room = new Room[100]; //I understand this is incorrect but I don't know what I should have in here 
i++; 
} 

System.out.println("Enter type of house:"); 
houseType = scan.next(); 
} 
public void addroom(String description, double length, double width) 
{ 

} 

int getIdNum() { 
return idNum; 
} 


@Override 

public String toString() 
{ 
    String report = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; 
    report += "Address: " + address + "\n"; 
    report += "No. of Rooms: " + numRooms + "\n"; 
    report += "House Type: " + houseType+ "\n"; 
    report += "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; 

    return report; 
} 
} 

Room:

import java.util.Scanner; 

public class Room { 

private String description; 
private double length; 
private double width; 

public Room (String description, double length, double width) { 
this.description = description; 
this.length = length; 
this.width = width;  
} 

public Room() { 
Scanner scan = new Scanner(System.in); 
scan.useDelimiter("\n"); 

System.out.println("Enter description of room:"); 
description = scan.next(); 

System.out.println("Enter length of room:"); 
length = scan.nextDouble(); 

System.out.println("Enter width of room:"); 
width = scan.nextDouble(); 
} 

/* 
* Calculates and returns area of Room 
*/ 
public double getArea() { 
return length*width; 
} 


@Override 
public String toString() { 
return description + "- Length: " + length + "m; Width: " + width + 'm'; 
} 
} 
+2

Задайте конкретный вопрос, связанный с ArrayList. –

ответ

0

Поскольку это домашнее задание я не буду решите его полностью, но дайте вам фундамент для работы от ...

public class House { 
    private List<Room> rooms; 

    public House() { 
    rooms = new ArrayList<Room>(); 
    } 

    public void addRoom(...) { 
    Room room = new Room(...); 
    rooms.add(room); 
    } 

    public int numRooms() { 
    return rooms.size(); 
    } 

    public Room getRoom(int roomNumber) { 
    return rooms.get(roomNumber); 
    } 
} 

public class Room { 
    public Room(...) { 
    ... 
    } 
} 

Вопросы?

+0

Повторив мою проблему, это было прекрасно! Спасибо! – user2160931

1

Вы проверили API для ArrayList?

Вам нужно что-то вроде:

rooms.add(new Room()); 

Кроме того, я хотел бы использовать Java дженериков и определить список таким образом:

private ArrayList<Room> rooms; 

Это делает использование generics, и гарантирует, что это может только быть списком комнат, а не разными объектами. Это сэкономит вам некоторые горе в том, что вы не можете непреднамеренно добавить домов в список номеров (через ошибки программирования)

0

Использование специализации списка к Room типа

List<Room> rooms = new ArrayList<Room>(); 

while (i < numRooms) //This will loop until all rooms have been described 
{ 
    rooms.add(new Room()); //this is correct 
    i++; 
} 
+0

Спасибо всем! Любой из этих ответов мог бы очистить это для меня! Мне просто жаль, что я попросил о помощи около 5 часов назад. Спасибо, agian. – user2160931

0

Измените условия своего конструктора, добавив свой код в свои комнаты. ArrayList.

public House(..., ArrayList aRooms) { 

... 
rooms = aRooms; 
} 

public House() { 

... 
// It's better to instantiate the rooms array here. 
rooms = new ArrayList<Room>(); 
} 

Для добавления номера в свои комнаты ArrayList, просто сделать что-то подобное (не забудьте проверить ArrayList API, http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html).

ArrayList<Room> rooms = new ArrayList<Room>(); 
rooms.add(new Room(...)); 
// Add here all the rooms you need. 

House house = new House(rooms); 

// You can also create a method into the House class to allow adding new rooms once you have created a House object. 
public void addRoom(Room room) { 

this.rooms.add(room); 
} 
0

Изменить этот цикл:

while (i < numRooms) //This will loop until all rooms have been described 
{ 
    add.room = new Room[100]; //I understand this is incorrect but I don't know what I should have in here 
i++; 
} 

To:

while (i < numRooms) 
{ 
Room newRoom = new Room(); 
rooms.add(newRoom); 
i++; 
}