0

この割り当てでは、さまざまな部屋オブジェクトを含む「ホテル」の配列を作成する必要があり、これらの部屋には部屋番号と費用の要素が含まれます。

この 2D 配列を生成することから始めようとしています。次に、配列の各「部屋番号」を設定するミューテーター メソッドを使用する for ループを使用します。コードはコンパイルされますが、nullpointerexception エラーが発生します。

私のメソッドが要素に対して機能しない理由を理解したら、大丈夫だと思います。残りはスキャナー入力といくつかの例外処理だけです (無効な入力は throws ioexception を使用するだけですよね?)

ありがとうございました!

コードは次のとおりです。

public class Hotel{

   public static void main(String[] args){
  int choice = 0;

  System.out.println("Welcome to the Hotel California.");
  Scanner sc = new Scanner(System.in);
  Room[][] hotel = new Room[8][20];         
  for(int i = 0; i< hotel.length; i++){
     for(int j = 0; j<hotel[i].length;j++){

     int roomNum = (i * 100) + j + 1;

     hotel[i][j].setRoom(roomNum);

     }
  }

  System.out.println(hotel[0][0].getRoomNumber());


     do{

       System.out.println("What business have you today?");
       System.out.println("1. Guest Registration");
       System.out.println("2. Guest Checkout");
       System.out.println("3. Show me occupied rooms");
       System.out.println("4. Exit");

       choice = sc.nextInt();



     }while(choice != 4);


  }

}

4

2 に答える 2

1

Object配列内の要素はnullデフォルトです。メソッドを呼び出す前に、配列内の要素を初期化します。

for (int i = 0; i < hotel.length; i++) {
   for (int j = 0; j < hotel[i].length; j++) {
      hotel[i][j] = new Room();
      ...
   }
}
于 2013-09-07T01:59:43.477 に答える
0
public class Hotel{

   public static void main(String[] args){
  int choice = 0;

  System.out.println("Welcome to the Hotel California.");
  Scanner sc = new Scanner(System.in);
  Room[][] hotel = new Room[8][20];         
  for(int i = 0; i< hotel.length; i++){
     for(int j = 0; j<hotel[i].length;j++){

     int roomNum = (i * 100) + j + 1;
     //hotel[i][j] is not initialized yet
     hotel[i][j] = new Room();
     //hotel[i][j] is initialized
     hotel[i][j].setRoom(roomNum);

     }
  }

  System.out.println(hotel[0][0].getRoomNumber());


     do{

       System.out.println("What business have you today?");
       System.out.println("1. Guest Registration");
       System.out.println("2. Guest Checkout");
       System.out.println("3. Show me occupied rooms");
       System.out.println("4. Exit");

       choice = sc.nextInt();



     }while(choice != 4);


  }

}

あなたのコードを修正しました。のコンストラクターがRoomパラメーターを予期する場合は、それらをコンストラクター呼び出しに追加します。は初期化されていないため、のメソッドをhotel[i][j]参照できませんsetRoomhotel[i][j].

于 2013-09-07T02:14:00.557 に答える