0

该任务要求我们为具有各种房间对象的“酒店”创建一个数组,这些房间将包含房间号和成本元素。

我试图从生成这个二维数组开始,然后使用一个 for 循环,该循环使用一个 mutator 方法来设置数组的每个“房间号”。代码编译,但我得到一个 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]没有初始化,所以你不能引用的setRoom方法hotel[i][j].

于 2013-09-07T02:14:00.557 回答