gpt4 book ai didi

java - System.in.read() 被跳过而不提示输入

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:07 26 4
gpt4 key购买 nike

我写了一段代码,有点像面试。它会询问您的年龄和性别。由于某种原因,.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。因此,您的 GeschlechtAlter 应该被称为 geschlechtalter

此外,您应该在您需要的确切位置创建变量,而不是更早。所以不是

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com