我正在通过控制台显示酒店预订系统。系统应该允许用户选择最多10个房间号码(1-10)并给出正在预订的客户名称。下面我提出了一种方法,以便在程序运行时保持所有房间都为空。
private static void initialise(String hotelRef[]) {
for (int x = 1; x < 11; x++) {
hotelRef[x] = "EMPTY";
}
}
我可以预订房间并查看它们但是当我尝试对数组进行排序以按字母顺序显示时,它会终止程序并显示错误。 (主线程中的nullpointerexception)。
Arrays.sort(hotel);
for (int x = 1; x < 11; x++) {
System.out.println(Arrays.toString(hotel));
}
以上是我目前正在尝试的但它没有到达第一行。关于如何按顺序显示数组的任何想法?非常感谢任何帮助。
P.s忘了提到数组是在main方法的开头初始化的。上面的代码是另一种方法。 我的主要方法:
public static void main(String[] args) {
String[] hotel = new String[11];
initialise(hotel);
Menu(hotel);
}
答案 0 :(得分:1)
这是你的问题:
for (int x = 1; x < 11; x++) {
您使用自然数字在数组中进行索引,但在Java索引中以0
开头。因此,数组中的第一个元素未初始化。
当Arrays.sort(hotel)
尝试在元素equals()
上调用hotel[0]
方法时,它会引发NullPointerException
。
解决方案:
习惯于基于零的索引。
答案 1 :(得分:0)
首先你的循环从1开始到11,所以第一个价值总是null
:
[null, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY]
--^^------------------------------------------------------------------------
第二次当您更改阵列时,您应该将其返回。
你的程序应该是这样的:
public static void main(String[] args) {
String[] hotel = new String[11];
hotel = initialise(hotel);
Menu(hotel);
}
private static String[] initialise(String hotelRef[]) {
for (int x = 0; x < hotelRef.length; x++) {
hotelRef[x] = "EMPTY";
}
return hotelRef;
}
private static void Menu(String[] hotel) {
Arrays.sort(hotel);
for (int x = 0; x < hotel.length; x++) {
System.out.println(Arrays.toString(hotel));
}
}
注意强>
当您使用长度时,请不要使用x < 11
这样的长度,如果您更改大小,这可能会出现问题,因此要避免使用arrayName.length
而不是hotel.length
答案 2 :(得分:0)
数组索引从0开始,但你的循环从索引1开始。所以hotel[0]
是null
。
答案 3 :(得分:0)
只是,for循环有问题。
你必须从0开始而不是1:
private static void initialise(String hotelRef[]) {
for (int x = 0; x < 10; x++) {
hotelRef[x] = "EMPTY";
}
}
因为,当您像这样实例化酒店数组时:
String[] Hotel = new String[10]
你有10个房间,从0到9
开始