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

问题描述 投票:0回答:3

我应该问“选择”,用户应该输入 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 loops char
3个回答
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(" !");

1
投票

您的

eingabe
变量应在循环外部定义,以便其余代码可以访问它。只是要小心,不要使用在条件中检查的值来初始化它,或者最好使用 do-while 来代替。

我将您的代码切换为使用常规 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(" !");

编辑:直接从标准输入读取字符是相当原始的,当它读取'时,你会得到第二个“Bitte auswaehlen:” ' 特点。你会想要一个合适的

BufferedReader
来清晰地逐行读取 stdin


0
投票

我觉得你的表达有问题

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');
© www.soinside.com 2019 - 2024. All rights reserved.