希望得到一些帮助 - 我被要求使用uni的方法编写酒店房间系统。一切顺利,直到我尝试按字母顺序排列数组。
我已经设法让它在方法中订购,但它更新了主阵列(酒店)。我希望它保持在订单方法中,如果这有意义吗?
我在下面包含了一个没有所有功能的缩减版本。
目前它将对阵列酒店进行重新排序,因此,如果您查看房间,阵列将打印出像e,e,e等,George,Peter,Robert'而不是保持其原始形式,罗伯特,彼得,e,e等,乔治'
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String roomName;
int roomNum = 0;
String[] hotelRef = new String[12];
String[] hotel = new String[12];
initialise(hotel); //initialise
while (roomNum < 13) {
System.out.println("Please select from the menu:");
System.out.println("V : View rooms");
System.out.println("O : Order Guests alphabetically");
String selection = input.next();
switch (selection) {
//There are more switch cases on the original version
case "O":
order(hotel);
break;
default:
System.out.println("");
}
}
}
private static void order(String[] hotelRef) {
int j;
boolean flag = true; //will determine when the sort is finished
String temp;
String[] order = new String[12];
order = hotelRef;
while (flag) {
flag = false;
for (j = 0; j < order.length - 1; j++) {
if (order[j].compareToIgnoreCase(order[j + 1]) > 0) {
//ascending sort
temp = order[j];
order[j] = order[j + 1]; // swapping
order[j + 1] = temp;
flag = true;
}
}
}
for (int y = 0; y < order.length; y++) {
if (!order[y].equals("e")) {
System.out.println("Room " + y + " is occupied by " + order[y]);
}
}
System.out.println("Ordering completed");
}
答案 0 :(得分:1)
您应该克隆hotelRef
而不是像order = hotelRef;
您可以在创建订单数组时执行以下操作:
String[] order = new String[hotelRef.length]; // to make sure that order has the right size.
而不是order = hotelRef;
for (int i=0;i<order.length;i++)
order[i]=hotelRef[i]; // thereby cloning
或使用System.arraycopy()
或任何其他方法来完成克隆数组。
答案 1 :(得分:0)
您可以在订购方式中复制酒店阵列:
String[] hotelCopy = new String[hotelRef.length];
System.arraycopy(hotelRef, 0, hotelCopy, 0, hotelRef.length);
然后在订单方法中使用hotelCopy。
答案 2 :(得分:0)
问题在于以下一行
order = hotelRef;
将其更改为
order = hotelRef.clone();
虽然您正在创建新对象,但您只分配了对外部对象的引用。因此,无论你在内部对象中做出什么改变,它都会被反射到外部对象。