簡體   English   中英

我希望重復我的菜單,直到我決定退出

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM