如何反复提问直到我得到正确答案作为角色

问题描述

我应该问“选择”,如果他输入其他内容用户应该输入 a b 或 c,它应该重复这个问题。我什至不明白我是怎么做到的,然后我又遇到了另一个问题:稍后我应该打印出所选的咖啡种类,但是因为“eingabe”已经过一段时间了,或者如果我想打印时无法识别它稍后使用它。我该如何解决这个问题?还是我应该使用另一个循环?字符甚至是在这里使用的正确类型吗? 提前谢谢。

    while(eingabe != 'a' || eingabe != 'b' || eingabe ||'c') {
        Out.println("Bitte auswaehlen: ");
        char eingabe = in.readChar();
    }
        
    Out.print("Gewaehlt ");
    if (eingabe == 'a') Out.print("CAPPUCCINO");
    if (eingabe == 'b') Out.print("MOKKA");
    if (eingabe == 'c') Out.print("VERLAENGERTER");
    Out.print(" !");
}

解决方法

如前所述,您应该在循环之外声明它。并且您在检查 c 时在循环中输入错误:

    char eingabe = '';
    while(eingabe != 'a' && eingabe != 'b' && eingabe != 'c') {
        Out.println("Bitte auswaehlen: ");
        eingabe = in.readChar();
    }
        
    Out.print("Gewaehlt ");
    if (eingabe == 'a') Out.print("CAPPUCCINO");
    if (eingabe == 'b') Out.print("MOKKA");
    if (eingabe == 'c') Out.print("VERLAENGERTER");
    Out.print(" !");
,

您的 eingabe 变量应该在循环之外定义,以便您的其余代码可以访问它。请注意不要使用条件中检查的值来初始化它,或者甚至更好地使用 do-while 代替。

我将您的代码切换为使用常规 System.in 和 System.out,因为我不知道那些 in 和 Out 是什么。最后但并非最不重要的是,您的输出条件是错误的,您应该再次询问该值是否与所有预期值不同,而不是与 any 不同(始终为真):

        char eingabe;
        do {
            System.out.println("Bitte auswaehlen: ");
            eingabe = (char) System.in.read();
        } while (eingabe != 'a' && eingabe != 'b' && eingabe != 'c');

        System.out.print("Gewaehlt ");
        if (eingabe == 'a')
            System.out.print("CAPPUCCINO");
        if (eingabe == 'b')
            System.out.print("MOKKA");
        if (eingabe == 'c')
            System.out.print("VERLAENGERTER");
        System.out.print(" !");
,

我认为您的表达式 eingabe != 'a' || eingabe != 'b' || eingabe ||'c' 有问题。也许你的意思是eingabe != 'a' || eingabe != 'b' || eingabe != 'c'。我认为为了在用户输入其他内容时继续循环,您需要使用 && 而不是 ||。 do while 循环非常适合您的用例:

char eingabe;
Scanner in = new Scanner(System.in);
do {
    System.out.println("Bitte auswaehlen: ");
    eingabe = in.next().toCharArray()[0];
} while (eingabe != 'a' && eingabe != 'b' && eingabe != 'c');