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

标签 java

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

相关文章:

java - Java 中的 "Too Many Connections"错误(MYSQLNonTransientConnectionException)

java - Swagger codegen 生成重复的变量

java - 为什么 EasyMock 的 IArgumentMatcher 接口(interface)使用 StringBuffer?

java - 从第二个 Activity 启动第一个 Activity 的第二个选项卡 fragment

java - 我如何知道 Java Stream collect(Collectors.toMap) 是否并行化?

java - 安卓日期转换

java - 将整数值转换为 LocalDateTime

java - 类中的空指针异常

java - Eclipse 工作区名称保留

java - 如何解决这个 "java.lang.IndexOutOfBoundsException"错误?