我正在尝试用Java创建酒店菜单(我仍在学习语言),但遇到了问题。我可以使菜单打开一个新菜单,但是当我从第二个菜单中进行选择时,它会不断循环。我认为是导致问题的for循环。谁能建议我如何获得第二个菜单项来停止循环?下面的方法:
菜单类方法:
public void getMenu()
{
Floor floor = new Floor();
Scanner kboard = new Scanner(System.in);
int choice = 0;
System.out.println("Booking Menu");
System.out.println("Select from the options below");
System.out.println("1. Check room availability");
System.out.println("2. Display floor");
System.out.println("3. Display all availability");
System.out.println("4. Cancel Booking");
System.out.println("Please enter choice (press 8 to continue)");
choice=kboard.nextInt();
do
{
switch(choice)
{
case 1: room.getRoomMenu();
break;
case 2:
break;
case 3:
break;
}
}
while (choice !=8);
}
该菜单使用此方法打开第二个菜单:
public void getRoomMenu()
{
Floor f1 = new Floor(1);
Floor f2 = new Floor(2);
Floor f3 = new Floor(3);
Floor f4 = new Floor(4);
boolean check = false;
Scanner kboard = new Scanner(System.in);
int choice = 0;
System.out.println("Which Floor?");
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
choice=kboard.nextInt();
do
{
switch(choice)
{
case 1: f1.displayFloor();
break;
case 2: f2.displayFloor();
break;
case 3: f3.displayFloor();
break;
case 4: f4.displayFloor();
break;
}
}
while(choice !=8);
kboard.close();
}
第二个菜单选项应显示选定的楼层,该楼层显示该楼层的所有房间。这是displayFloor方法:
public void displayFloor()
{
/**
* Displays floor number and room display method
*/
System.out.println("Floor: "+floorNumber);
for(int counter=0;counter<rooms.length;counter++)
{
rooms[counter].display();
}
}
答案 0 :(得分:2)
您的while循环都继续循环,直到choice != 8
。而且由于您从不修改循环内的choice
,因此它将继续循环(除非用户输入了8
)。
还要注意,您添加的break;
是针对switch
情况的中断,并不是为了停止do-while
循环。要在切换情况下使break
停止整个do-while
循环,应使用标签为循环命名,然后中断该循环。另外,您应该要求用户提供一个新的输入,如果它没有进入开关盒之一,否则它将永远循环。像这样:
choice = kboard.nextInt();
myLoop: do {
switch(choice) {
case 1:
f1.displayFloor();
break myLoop;
case 2:
f2.displayFloor();
break myLoop;
case 3:
f3.displayFloor();
break myLoop;
case 4:
f4.displayFloor();
break myLoop;
default: // Not one of the above
System.out.println(choice + " is an unknown choice. Please choose again.");
choice = kboard.nextInt(); // Ask the user for a new input
break; // <- This break only breaks the switch, not the loop
}
} while(choice !=8);
如果您打算继续循环播放直到用户输入8
,它应该是这样的:
choice = kboard.nextInt();
do {
switch(choice) {
case 1:
f1.displayFloor();
break;
case 2:
f2.displayFloor();
break;
case 3:
f3.displayFloor();
break;
case 4:
f4.displayFloor();
break;
default: // Not one of the above
System.out.println(choice + " is an unknown choice. Please choose again.");
}
choice = kboard.nextInt(); // Ask the user for a new input for the next iteration
} while(choice !=8);
答案 1 :(得分:0)
循环在这里发生:
while(choice !=8);
您需要确保始终满足结束条件,以避免不必要的无限循环。
也许您的意思是if(choice != 8)
而不是do / while循环(它将一直运行直到选择为8,只有在用户输入8时才会发生)。