[英]I want my menu to be repeated until I decide to exit
现在,我的代码接收输入,并执行与数字(用户输入)匹配的代码,并自动终止。 但是,我希望我的菜单一直显示,直到用户决定退出(在我的情况下为 8 号)。
给定以下代码:
int[] main_array;
main_array = new int[500];
boolean choice = false;
int menu = 0;
Random randomvar = new Random(); //creating random class object
for(int i = 0; i < 500; i++){
main_array[i] = randomvar.nextInt(1000) + 1;
}
while(!choice){
while(true){
Scanner sc = new Scanner(System.in);
System.out.println( "Enter 1: Output all values\n"+
"Enter 2: Output the sum and mean of the values\n"+
"Enter 3: Output all odd numbers\n"+
"Enter 4: Output all even numbers\n"+
"Enter 5: Output Middle Value\n"+
"Enter 6: Output First value\n"+
"Enter 7: Output Last value\n"+
"Enter 8: Exit");
try{
menu = sc.nextInt();
break;
} catch(Exception e) {
System.out.println("Wrong input");
}
}
switch(menu){
case 1:
choice = true;
for(int i = 0; i < 500; i++){
System.out.print(main_array[i] + " ");
}
break;
case 2:
choice = true;
int sum = 0;
for(int i = 0; i < 500; i++){
sum += main_array[i];
}
System.out.println("sum: " + sum);
System.out.println("Mean average: " + (sum / 500));
break;
case 3:
choice = true;
for(int i = 0; i < 500; i++){
if(main_array[i] % 2 == 1)
System.out.print(main_array[i] + " ");
}
break;
case 4:
choice = true;
for(int i = 0; i < 500; i++){
if(main_array[i] % 2 == 0)
System.out.print(main_array[i] + " ");
}
break;
case 5:
choice = true;
System.out.println(main_array[500/2]);
System.out.println(main_array[500/2]-1);
break;
case 6:
choice = true;
System.out.println(main_array[0]);
break;
case 7:
choice = true;
System.out.println(main_array[500 - 1]);
break;
case 8:
System.out.println("Exit the program");
return;
default:
System.out.println("Invalid input!");
break;
}
}
}
我希望我的菜单一直重复,直到我输入数字 8,所以我尝试通过替换 while(true) 循环内的 switch 语句来编辑我的代码,但是 output 显示如下:
Enter 1: Output all values
Enter 2: Output the sum and mean of the values
Enter 3: Output all odd numbers
Enter 4: Output all even numbers
Enter 5: Output Middle Value
Enter 6: Output First value
Enter 7: Output Last value
Enter 8: Exit
2
Enter 1: Output all values
Enter 2: Output the sum and mean of the values
Enter 3: Output all odd numbers
Enter 4: Output all even numbers
Enter 5: Output Middle Value
Enter 6: Output First value
Enter 7: Output Last value
Enter 8: Exit
5
Enter 1: Output all values
Enter 2: Output the sum and mean of the values
Enter 3: Output all odd numbers
Enter 4: Output all even numbers
Enter 5: Output Middle Value
Enter 6: Output First value
Enter 7: Output Last value
Enter 8: Exit
固定代码:
int[] main_array;
main_array = new int[500];
boolean choice = false;
int menu = 0;
Random randomvar = new Random(); //creating random class object
for(int i = 0; i < 500; i++){
main_array[i] = randomvar.nextInt(1000) + 1;
}
while(!choice){
while(true){
Scanner sc = new Scanner(System.in);
System.out.println( "Enter 1: Output all values\n"+
"Enter 2: Output the sum and mean of the values\n"+
"Enter 3: Output all odd numbers\n"+
"Enter 4: Output all even numbers\n"+
"Enter 5: Output Middle Value\n"+
"Enter 6: Output First value\n"+
"Enter 7: Output Last value\n"+
"Enter 8: Exit");
try{
menu = sc.nextInt();
break;
} catch(Exception e) {
System.out.println("Wrong input");
}
switch(menu){
case 1:
choice = true;
for(int i = 0; i < 500; i++){
System.out.print(main_array[i] + " ");
}
break;
case 2:
choice = true;
int sum = 0;
for(int i = 0; i < 500; i++){
sum += main_array[i];
}
System.out.println("sum: " + sum);
System.out.println("Mean average: " + (sum / 500));
break;
case 3:
choice = true;
for(int i = 0; i < 500; i++){
if(main_array[i] % 2 == 1)
System.out.print(main_array[i] + " ");
}
break;
case 4:
choice = true;
for(int i = 0; i < 500; i++){
if(main_array[i] % 2 == 0)
System.out.print(main_array[i] + " ");
}
break;
case 5:
choice = true;
System.out.println(main_array[500/2]);
System.out.println(main_array[500/2]-1);
break;
case 6:
choice = true;
System.out.println(main_array[0]);
break;
case 7:
choice = true;
System.out.println(main_array[500 - 1]);
break;
case 8:
System.out.println("Exit the program");
return;
default:
System.out.println("Invalid input!");
break;
}
}
}
我应该如何解决它?
您可以删除while(true)
循环,而不是在所有情况下设置choice=true
,只需在case 8
中将其设置为 true 。
您还可以使用 do while 循环并在 while 中添加条件,例如选择等于退出。
int choice = -1;
do{
choice = scanner.nextInt();
// your logic
}while(choice != 8);
如上所述,您有两个循环。
你在你的循环中创建了一个新的 Scanner object,这真的很混乱。
为什么不创建一个菜单 function,例如:
private static void menu() {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("menu");
switch (scanner.nextInt()) {
case 1:
// foo
break;
// and so on until case 8 :
case 8:
scanner.close();
return; // Leave your function. You don't even need to use a boolean
}
}
}
请注意,如果您需要在 function 之外使用扫描仪,请在之前声明并作为 function 的参数传递。 (您应该只有一个扫描仪实例)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.