代码在while循环中打印出两次?

时间:2014-11-21 10:14:05

标签: java loops if-statement while-loop println

在此代码中,用户输入一个测试标记,并且应该打印出成绩并询问用户是否想要输入另一个标记,但是,我的问题是它打印出这个位两次我不喜欢不知道为什么?

import java.util.Scanner;

public class ExamGrades {

    public static void main(String[] args) {
        int mark;
        String answer;
        Scanner scan = new Scanner(System.in);

        System.out.println("Enter student mark: ");
        mark = scan.nextInt();
        while (mark >= 0) {

            if (mark < 40) {
                System.out.println("FAILED.");
            } else if (40 <= mark && mark <= 49) {
                System.out.println("3rd");
            } else if (50 <= mark && mark <= 59) {
                System.out.println("2/2");
            } else if (60 <= mark && mark <= 69) {
                System.out.println("2/1");
            } else if (mark >= 70 && mark <= 100) {
                System.out.println("1st");
            } else if (mark > 100) {
                System.out.println("Invalid mark");
            }

            System.out.println("Enter another mark? Yes or No: ");
            answer = scan.nextLine();

            if (answer.equalsIgnoreCase("yes")) {
                System.out.println("Enter student mark: ");
                mark = scan.nextInt();
            } else if (answer.equalsIgnoreCase("no")) {
                mark = -1;
                System.out.println("Thank you.");
            }

        }
        scan.close();
    }
}

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:2)

原因是当您输入标记时,按下56&lt; enter&gt;。您的API nextInt只读取56并离开输入由nextLine api消耗的内容。

为了避免这种情况,请在下面的sysout之前:

System.out.println("Enter another mark? Yes or No: ");

输入以下行:

scan.nextLine();

这样你的&lt; enter&gt;被这个api消耗掉,你可以成功地向前阅读用户输入是/否。