2017-12-11 4 views
-3

3つのオブジェクトを持つプログラムを作成しようとしています。ホテル、部屋、ベッド。オブジェクトベッドはベッドに関する情報を保持します。オブジェクトルームには、ベッドの数など、部屋に関する情報が保存されます。オブジェクトホテルには、それに含まれるルーム数に関する情報が含まれます。他のオブジェクト内でオブジェクト配列の長さを宣言する方法

ホテルクラスのための私のコードは、この

public class Hotel { 

    private String name; 
    private boolean HasVacency = false; 
    public int numberOfRooms; 
    Room[] rooms = new Room[numberOfRooms + 1]; 

    public Hotel() { 


    } 

    public void setRoom(int numberOfRooms) { 
     this.numberOfRooms = numberOfRooms; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 





} 

のように見えると私は入れませんが、私はホテルを作成し、値を宣言したテストクラスのコードは、この

public static void main(String[] args) { 
    HotelTest t = new HotelTest(); 
    t.getHotelInfo(); 



} 

public void getHotelInfo() { 
    Hotel test = new Hotel(); 
    int numberOfRooms; 
    int numberOfBeds; 
    String size; 
    Scanner input = new Scanner(System.in); 

    System.out.println("what is the name of the hotel"); 
    String name = input.next(); 
    test.setName(name); 

    System.out.println("how many rooms does the hotel have"); 
    numberOfRooms = input.nextInt(); 
    test.setRoom(numberOfRooms); 
    System.out.println(test.rooms.length); 


    for(int i = 0; i< test.numberOfRooms + 1; i++) { 

     System.out.println("how many beds does room " + (i + 1) + " have"); 
     numberOfBeds = input.nextInt(); 
     System.out.println(i); 
     test.rooms[i].setNumberOfBeds(numberOfBeds); 

    } 

} 

のように見えますテスト中の部屋数の値を設定しようとするとnullポインタが返されます。厄介なコードに申し訳ありません

答えて

0
class Hotel { 

    private String name; 
    private boolean HasVacency = false; 


    public Hotel(int numberOfRooms) { 

     Room[] rooms = new Room[numberOfRooms + 1]; 

    } 



    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 
} 

私はあなたのホテルクラスを変更しました。あなたの古いコード配列では、numberOfRoomsを更新する前に部屋の初期化が行われていました。このようなオブジェクトを作成するHotel test = new Hotel(numberOfRooms);

1

ここではいくつかのことを見てください。あなたのコードはカプセル化を解除します(あなたは他のクラスがアクセスしているあなたのホテルクラスのパブリックメンバーを持っています)。あなたは物事を少しきれいにするためにコンストラクタを利用することができます。トップダウンアプローチではなく、コンポーネントを上向きにしてホテルを作成することを検討してください。私は、あなたに基づいていくつかのサンプルコードを含んでいます。

public class Hotel { 

    private final List<Room> rooms; 

    private final String name; 

    // constructor to initialize hotel with name and number of rooms 
    public Hotel(String name, List<String> rooms) { 
     this.name = name; 
     this.rooms = rooms; 
    } 

    public Room[] getRooms() { 
     return this.rooms; 
    } 

    public String getName() { 
     return this.name; 
    } 

} 

public class Room { 

    private final int beds; 

    // constructor to initialize a room with the number of beds it needs 
    public Room(int beds) { 
     this.beds = beds; 
    } 

    public int getBeds() { 
     return this.beds; 
    } 

} 

public void getHotelInfo() { 
    Scanner input = new Scanner(System.in); 

    System.out.println("what is the name of the hotel"); 
    String name = input.next(); 

    System.out.println("how many rooms does the hotel have"); 
    int numberOfRooms = input.nextInt(); 

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

    for(int i = 0; i< numberOfRooms; i++) { 
     System.out.println("how many beds does room " + (i + 1) + " have"); 
     int numberOfBeds = input.nextInt(); 

     // create a room with the number of beds specified and add it to the list of rooms 
     Room room = new Room(numberOfBeds); 
     rooms.add(room); 
    } 

    Hotel hotel = new Hotel(name, rooms); 

    // from here on, if you want the hotel's name or its rooms, you can use the appropriate getter methods in the Hotel and Room classes 

} 
関連する問題