Java 在循环开关盒和嵌套while循环时遇到问题

Java 在循环开关盒和嵌套while循环时遇到问题,java,while-loop,switch-statement,Java,While Loop,Switch Statement,我对编程很陌生,因为这是我大学的第一个学期,之前没有任何知识。在使用Python之后,现在开始使用Java,我们目前正在开发一个算命程序。我遇到的主要问题是试图返回到开关,询问用户是否希望再次播放,或者他们是否输入了8个案例之外的无效响应。还必须在另一个while循环中嵌套一个while循环 Scanner user = new Scanner(System.in); System.out.println("Welcome to the Fortune Telling program.\

我对编程很陌生,因为这是我大学的第一个学期,之前没有任何知识。在使用Python之后,现在开始使用Java,我们目前正在开发一个算命程序。我遇到的主要问题是试图返回到开关,询问用户是否希望再次播放,或者他们是否输入了8个案例之外的无效响应。还必须在另一个while循环中嵌套一个while循环

Scanner user = new Scanner(System.in);
    System.out.println("Welcome to the Fortune Telling program.\n"); //Welcome message

    System.out.print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: "); //ask for yes or no to run
    int Var0 = user.nextInt();
    if (Var0 == 1)
    {
        System.out.print("Enter a number 1-8 and I will tell your fortune: "); //ask for number between 1-8 to find fortune or invalid
        int Var1 = user.nextInt();                                              
            switch (Var1) 
            {
            case 1:                                                                             //case 1-8 fortunes
                System.out.println("\nYou will become great if you believe in yourself.");
                break;
            case 2:
                System.out.println("\nSerious trouble with bypass you.");
                break;
            case 3:
                System.out.println("\nYou will travel to many exotic places in your lifetime.");
                break;
            case 4:
                System.out.println("\nYour ability for accomplishment will follow with success.");
                break;
            case 5:
                System.out.println("\nWhen fear hurts you, conquer it and defeat it!");
                break;
            case 6:
                System.out.println("\nYou will be called in to fulfill a position of higher honor and responsibility.");
                break;
            case 7:
                System.out.println("\nYour golden opportunity is coming shortly.");
                break;
            case 8:
                System.out.println("\nIntegrity is doing the right thing, even when nobody is watching.");
                break;
            default:
                System.out.print("That's not a valid number. Try again.\n");                         //invalid number try to rerun for correct response
            }
        }                                                                                            //display next print only on case not default
    System.out.print("Would you like another fortune? Type 1 for yes and any other number for no: "); //loop this back into 'switch'
    int Var2= user.nextInt();

    System.out.print("Thank you for trying the fortune telling program.");                           //Thank you message
    user.close();
    }
}

您不需要嵌套循环。而loop做得很好。在这种情况下,您也只需要一个Var0,这也是保持/停止循环的条件。整个代码都在try-catch块中,以解决用户键入非int的内容时出现的问题。最后一个块关闭扫描仪-无论是否有和excepion

        Scanner user = new Scanner(System.in);
        try {

            System.out.println("Welcome to the Fortune Telling program.\n");
            System.out
                    .print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: ");
            int Var0 = user.nextInt();
            while (Var0 == 1) {
                System.out
                        .print("Enter a number 1-8 and I will tell your fortune: ");
                int Var1 = user.nextInt();
                switch (Var1) {
                case 1: // case 1-8 fortunes
                    System.out
                            .println("\nYou will become great if you believe in yourself.");
                    break;
                case 2:
                    System.out.println("\nSerious trouble with bypass you.");
                    break;
                case 3:
                    System.out
                            .println("\nYou will travel to many exotic places in your lifetime.");
                    break;
                case 4:
                    System.out
                            .println("\nYour ability for accomplishment will follow with success.");
                    break;
                case 5:
                    System.out
                            .println("\nWhen fear hurts you, conquer it and defeat it!");
                    break;
                case 6:
                    System.out
                            .println("\nYou will be called in to fulfill a position of higher honor and responsibility.");
                    break;
                case 7:
                    System.out
                            .println("\nYour golden opportunity is coming shortly.");
                    break;
                case 8:
                    System.out
                            .println("\nIntegrity is doing the right thing, even when nobody is watching.");
                    break;
                default:
                    System.out.print("That's not a valid number. Try again.\n");
                }
                System.out
                        .print("Would you like another fortune? Type 1 for yes and any other number for no: ");
                Var0 = user.nextInt();
            }

            System.out
                    .print("Thank you for trying the fortune telling program.");
        } catch (Exception e) {
System.out.println("This is what you tell if user types something which is not a digit");
        } finally {
            user.close();
        }

一些概念上的帮助:

当你说我需要回到开关。。。这意味着你需要一个循环

哪些部分需要重复?你或者更确切地说,你的导师可能期望的行为是,在算命之后,你希望我告诉你的命运的问题会再次出现。这意味着你必须把它,以及所有它所包含的算命本身放在一个循环中

在这种情况下,通常的构造是

显示问题 获取用户输入 循环,条件是用户没有输入完成输入 执行用户输入所需的任何任务。 再次显示问题 再次获取用户输入,以便下次循环检查条件时,它将具有用于计算的新值。 你能想出适合这种模式的程序部分吗


下一件事是你需要一段时间在一段时间内。这里有一个提示:程序希望用户输入值1-8。如果他输入了“9”或“0”或其他内容,程序是否应该忽略这一点,然后再次询问他是否希望算命,还是应该坚持算命?

尝试以下方法。你不需要var1

public static void main(String[] args)
{
    // TODO Auto-generated method stub
    Scanner user = new Scanner(System.in);
    System.out.println("Welcome to the Fortune Telling program.\n"); //Welcome message

    System.out.print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: ");

    int Var0 = 0;

    while(Var0 != -1)
    {
        System.out.print("Enter a number 1-8 and I will tell your fortune or -1 to quit "); //ask for number between 1-8 to find fortune or invalid

        Var0 = user.nextInt();

        switch (Var0) 
        {
        case 1:                                                                             //case 1-8 fortunes
            System.out.println("\nYou will become great if you believe in yourself.");
            break;
        case 2:
            System.out.println("\nSerious trouble with bypass you.");
            break;
        case 3:
            System.out.println("\nYou will travel to many exotic places in your lifetime.");
            break;
        case 4:
            System.out.println("\nYour ability for accomplishment will follow with success.");
            break;
        case 5:
            System.out.println("\nWhen fear hurts you, conquer it and defeat it!");
            break;
        case 6:
            System.out.println("\nYou will be called in to fulfill a position of higher honor and responsibility.");
            break;
        case 7:
            System.out.println("\nYour golden opportunity is coming shortly.");
            break;
        case 8:
            System.out.println("\nIntegrity is doing the right thing, even when nobody is watching.");
            break;
        default:
            System.out.print("That's not a valid number. Try again.\n"); //invalid number try to rerun for correct response
        }

    }
    System.out.print("Thank you for trying the fortune telling program.");//Thank you message
    user.close();
}

将代码封装在try-catch块中,只需确保您将捕获在使用扫描仪时可能发生的任何异常。在finally块中关闭扫描仪,如果您使用的是java 1.7及更高版本,请使用try with resources。

为什么需要嵌套的while循环?这是任务的一部分。但是我不知道应该把它放在哪里,这样用户可以在需要时再次运行交换机@你的作业可能是由不太擅长编程的人设定的。IMHO您应该使用for循环,而不是while循环-因为您有一个迭代的方面来重新询问用户是否输入了无效的响应。此外,作业不应该规定一个实现——选择一个是学习的一部分。这实际上对我帮助很大!我会试着解决这个问题。我真的不想得到一个直接的答案,这样我就能自己弄明白了。下次我回复时,希望它会被更正。再次感谢你!