不需要时打印else语句

时间:2017-06-20 13:25:19

标签: java if-statement while-loop

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();
    }
}

当用户键入3或4或5时,它将打印“需要...”以及“无效输出语句”,但我不想要最后一个语句。如何防止显示最后一个语句?

2 个答案:

答案 0 :(得分:0)

如果您使用

age = sc.nextInt();

并在使用后

String yn = sc.nextLine();

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

一个例子:

如果您的输入是

3 y

在这种情况下程序打印

"Need to be accompanied by an adult above 16\nHave an adult to accompany?y/n"

但也打印

"Invalid output"

这是因为yn的值为“enter”(如所述的Alex),并且在第二次迭代中捕获值“y”。

答案 1 :(得分:0)

sc.nextInt()

不会消耗输入中的新行字符。因此,当您键入3并按Enter键时,您的输入将为:&#34; 3 \ n&#34;但是扫描仪只能读取3.因此当你打电话时

sc.nextLine()

扫描仪将读取剩余的换行符,这会影响您的输入。您可以通过在scanner.nextInt()方法之后调用nextLine方法来解决此问题,以消耗剩余的换行符,如此

sc.nextInt();
sc.nextLine();

或者您可以遵循Fabian的建议并使用Integer.ParseInt()和sc.nextLine()