繁体   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