如何反复问一个问题,直到我作为一个角色得到正确的答案

How to ask a question repeatedly until I get the right answer as a character

提问人:Ciro Mertens 提问时间:4/8/2021 更新时间:11/17/2023 访问量:50

问:

我应该问“选择”,如果用户输入其他内容,则应键入 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(" !");
}
java 循环 字符

评论

0赞 Med Elgarnaoui 4/8/2021
声明 while 循环的外部char eingabe = in.readChar();

答:

1赞 DorianHUN 4/8/2021 #1

如前所述,您应该在循环之外声明它。当您检查 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(" !");

评论

0赞 Ciro Mertens 4/8/2021
嘿,谢谢,我纠正了我的错误,但仍然有一件事没有解决。Char Eingabe = '';不起作用,因为“错误:空字符文字”
0赞 DorianHUN 4/9/2021
然后,您应该使用代码不接受的字符(不是 a、b 或 c)。
0赞 Rohan Kumar 4/8/2021 #2

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

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');
1赞 Helluys 4/8/2021 #3

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

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

        String eingabe;
        try (final InputStreamReader isr = new InputStreamReader(System.in)) {
            try (final BufferedReader in = new BufferedReader(isr)) {
                do {
                    System.out.println("Bitte auswaehlen: ");
                    eingabe = in.readLine();
                } while (!"a".equals(eingabe) && !"b".equals(eingabe) && !"c".equals(eingabe));
            }
        }

        System.out.print("Gewaehlt ");
        switch (eingabe) {
        case "a" -> System.out.print("CAPPUCCINO");
        case "b" -> System.out.print("MOKKA");
        case "c" -> System.out.print("VERLAENGERTER");
        default -> throw new IllegalStateException("Unexpected eingabe: " + eingabe);
        }
        System.out.print(" !");

编辑:直接从 stdin 读取字符是相当原始的,当它读取“\n”字符时,你会得到第二个“Bitte auswaehlen:”。你会想要一个适当的逐行干净地阅读stdinBufferedReader

评论

0赞 Ciro Mertens 4/8/2021
这很有效,谢谢。是的,我没有在使用 && 或 ||但是当它不编译时就更难了,你无法测试你的代码是否有意义。
0赞 Ciro Mertens 4/8/2021
实际上,当它重复它时,它会打印出两次。第一次它只打印一次,因为它应该这样做。Bitte auswaehlen: d Bitte auswaehlen: Bitte auswaehlen: f Bitte auswaehlen: Bitte auswaehlen: 你知道为什么会这样吗?