[英]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.