Java 不需要时打印else语句 publicstaticvoidadd2q(){ 系统输出打印(“年龄:”); 年龄=sc.nextInt(); 如果(!(年龄>=3&&age=3&&age

Java 不需要时打印else语句 publicstaticvoidadd2q(){ 系统输出打印(“年龄:”); 年龄=sc.nextInt(); 如果(!(年龄>=3&&age=3&&age,java,if-statement,while-loop,Java,If Statement,While Loop,如果您使用 age=sc.nextInt(); 使用后 String yn=sc.nextLine(); yn这是这行的最后一行(它是“”) 它更好用 age=Integer.parseInt(sc.nextLine())如果您的输入是每行的 例如: 如果您的输入是 3 y 在这种情况下,程序将打印 public static void add2q() { System.out.print("Age:"); age = sc.nextInt(); if (!(age &g

如果您使用

age=sc.nextInt();

使用后

String yn=sc.nextLine();

yn这是这行的最后一行(它是“”) 它更好用
age=Integer.parseInt(sc.nextLine())
如果您的输入是每行的

例如:

如果您的输入是

3
y

在这种情况下,程序将打印

public static void add2q() {
    System.out.print("Age:");
    age = sc.nextInt();
    if (!(age >= 3 && age <= 80)) {
        System.out.println("Sorry you must be between the age of 3 to 80");
    } else if (age >= 3 && age <= 5) {
        while (true) {
            System.out.println("Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n");
            String yn = sc.nextLine();
            if (yn.equals("y")) {
                System.out.print("Child's Name: ");
                name = sc.nextLine();
                names.add(name);
                price();
                addAdult();
                break;
            } else if (yn.equals("n")) {
                while (true) {
                    System.out.println("Sorry you cannot take this ride");
                    add2q();
                    break;
                }
            } else {
                System.out.println("Invalid output"); //funny problem here 
            }
        }
    } else {
        System.out.print("Name: ");
        name = sc.nextLine();
        names.add(name);
        price();
    }
}
而且还有印刷品

"Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n"
这是因为yn有一个值“enter”(如Alex所说),值“y”在第二次迭代中被捕获

"Invalid output"
不使用输入中的新行字符。因此,当您键入3并按enter键时,您的输入将为:“3\n”,但扫描仪将只读取3。因此,当您调用

sc.nextInt()
扫描器将读入剩余的换行符,这会扰乱您的输入。您可以通过在scanner.nextInt()方法之后调用nextLine方法来解决这一问题,以便像这样使用剩余的换行符

sc.nextLine()

或者,您可以按照Fabian的建议,使用Integer.ParseInt()和sc.nextLine()

在“3、4或5”之后键入什么?好吧,这就是您的代码所做的。如果年龄在3:5范围内,但下一个输入(
yn
)不是
“y”
“n”
它将输出一个无效的输出。如果您不想这样做,只需更新您的条件假设键入y/n,但在我键入之前,它将打印“无效输入”@Coldspeed@AxelH是的,在我输入y/n之前,它会打印“无效输入”这就是问题所在,然后读取副本…这是一个常见错误。但这在谷歌很容易找到。请进一步解释。
nextInt
不要使用“回车”键扫描器的键,因此后面的每一条
nextLine
都会注意到它并读取它。使用
Integer.parseInt
更好地处理不正确的输入,而不是解析正确的内容。这不是解析内容的最佳方式。
sc.nextInt();
sc.nextLine();