我写了一段代码,有点像面试。它会询问您的年龄和性别。 由于某种原因,.exe 在打印出第二个问题后被终止。 这是为什么?我该如何解决?
我检查了语法,但似乎找不到错误。
导入java.io.IOException;
公开课缩写{
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
char Geschlecht;
System.out.println("Wie ist dein Geschlecht? M oder W?");
Geschlecht = (char) System.in.read();
int Alter;
System.out.println("Wie ist dein Alter?");
Alter = (int) System.in.read();
if (Alter >= 18 && Alter <= 100)
{
System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
}
}
它打印出这个字符串(“Wie ist dein Alter?”),然后它被终止。我不能输入我的年龄(数字),这是 println 中提出的问题。
我希望它能输入我的年龄,如果我在 18 到 100 岁之间,它应该告诉我“恭喜你成为成年人”。 (还没完还有更多if/else)
编辑:我尝试添加一个 if else 语句。当我运行 .exe 时:
if (Alter >= 18 && Alter <= 100)
{
System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
}
else if (Alter >= 0 && Alter <= 17);
{
System.out.println("Du bist leider minderjaehrig mein Kind");
}
当我这样做时,它只是在问题“Wie ist dein Alter?”之后打印出 else if println "Du bist leider minderjaehrig mein Kind"。它在那之后终止。
最佳答案
解释
您可能输入了多个字符。
例如,您点击了代表男性的 M
,同时还点击了 enter 按钮。您的实际输入是
M\n
不仅仅是
M
并且第一个 read
读取 M
而第二个读取 \n
而不要求您进行新输入,因为仍然有一些剩余未读输入。
因此 Alter
是 \n
字符的 int
值,因此您的 if
block 未输入.所以代码完全执行。
解决方案
Scanner
( documentation ) 是专门为简化此类输入读取而开发的方便类。
Scanner scanner = new Scanner(System.in);
System.out.println("Wie ist dein Geschlecht? M oder W?");
String geschlecht = scanner.nextLine();
System.out.println("Wie ist dein Alter?");
int alter = Integer.parseInt(scanner.nextLine());
if (alter >= 18 && alter <= 100) {
System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
}
注意事项
请注意,Java 命名约定对变量名使用 camelCase,而不是 PascalCase。因此,您的 Geschlecht
和 Alter
应该被称为 geschlecht
和 alter
。
此外,您应该在您需要的确切位置创建变量,而不是更早。所以不是
char geschlecht;
System.out.println("Wie ist dein Geschlecht? M oder W?");
geschlecht = ...
喜欢
System.out.println("Wie ist dein Geschlecht? M oder W?");
char geschlecht = ...
这将使您的代码更易于阅读。
根据您的操作系统,换行符可能不仅仅是\n
,也可能是\n\r
。自己处理这些东西非常麻烦,Scanner
会为您完成所有这些工作。
关于java - System.in.read() 被跳过而不提示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55890243/