我应该问“选择”,用户应该输入 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 是什么。最后但并非最不重要的一点是,您的输出条件是错误的,您应该再次询问该值是否与所有预期值不同,而不是是否与任何值不同(这始终是正确的):
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
我觉得你的表达有问题
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');