清空缓冲区,输出名字和姓氏。

4

我遇到了程序问题。如果我移除in.nextLine,则名字和姓氏的println将会一个接一个地打印出来;但是如果我保留它,则输出中不会显示名字,因为我认为它已经被删除了。非常感谢您提供任何帮助。

import java.util.*;

public class Main
{

public static void main(String[] args)
{
    //Utilities
    Scanner in = new Scanner(System.in);

    //Variables
    int studentId = 0;
    String lastName = "";
    String firstName = "";
    String gradeLetter = "";
    String quit = "";
    double userHomeworkScore = 0.0;
    double userQuizzesScore = 0.0;
    double userMidTermScore = 0.0;
    double userFinalScore = 0.0;
    double homeworkScore = 0.0;
    double quizzesScore = 0.0;
    double midTermScore = 0.0;
    double finalScore = 0.0;
    double totalScore = 0.0;

    do {


        System.out.println("Please enter Student ID");
        studentId = in.nextInt();

        System.out.println("Please enter first name");
        firstName = in.nextLine();

        in.nextLine();

        System.out.println("Please enter last name");
        lastName = in.nextLine();

        System.out.println("Please enter score for the assignments");
        userHomeworkScore = in.nextDouble();

        System.out.println("Please enter score for the quizzes");
        userQuizzesScore = in.nextDouble();

        System.out.println("Please enter score for the midterm");
        userMidTermScore = in.nextDouble();

        System.out.println("Please enter score for the final");
        userFinalScore = in.nextDouble();

        String fullName = (firstName + "," + lastName);

        homeworkScore = (userHomeworkScore * 0.50);
        quizzesScore = (userQuizzesScore * 0.20);
        midTermScore = (userMidTermScore * 0.10);
        finalScore = (userFinalScore * 0.20);

        totalScore = (homeworkScore+quizzesScore+midTermScore+finalScore);

        if (totalScore >= 90)
        {
            gradeLetter = "A";
        }
        else if (totalScore >= 80)
        {
            gradeLetter = "B";
        }
        else if (totalScore >= 70)
        {
            gradeLetter = "C";
        }
        else if (totalScore >= 60)
        {
            gradeLetter = "D";
        }
        else
        {
            gradeLetter = "E";
        }


        //Output
        System.out.println(""+fullName+"");
        System.out.println("Student ID:" + studentId + "");
        System.out.println("Homework:" + homeworkScore + "");
        System.out.println("Quizzes:" + quizzesScore + "");
        System.out.println("Midterm:" + midTermScore + "");
        System.out.println("Final:" + finalScore + "");
        System.out.println("Total Score: " + totalScore + " Grade: " + gradeLetter + "");

        System.out.println("Press any key to enter another student or enter q to quit.");
        quit = in.nextLine();
        in.nextLine();

    }while(!quit.equalsIgnoreCase("q"));


}

}


我注意到的第一件事是,在读取 firstNamelastName 之前,您设置了 String fullName = (firstName + "," + lastName); - Elliott Frisch
我尝试将它移动到输出正上方,但似乎没有什么区别。 - K455306
我错了,看起来它确实可以这样做,所以我把那行移到下面了,但是我怎么才能让它扫描名字和姓氏呢? - K455306
1个回答

0
在读取整数后,您需要“Flush”缓冲区。 原因是当您使用in.nextInt()时,它仅读取int值并跳过“\n”(行尾),使用in.nextLine()将消耗“\n”。
请使用以下代码:
 System.out.println("Please enter Student ID");
        studentId = in.nextInt();
        in.nextLine();

当然,在读取最后一个双精度数之后

System.out.println("Please enter score for the final");
        userFinalScore = in.nextDouble();
        in.nextLine();

你在两次读取行之间不需要“刷新”。 这是错误的:
System.out.println("Please enter first name");
    firstName = in.nextLine();

    in.nextLine();

    System.out.println("Please enter last name");
    lastName = in.nextLine();

另一种解决方案: 您可以使用in.next()来读取字符串。 in.next()会查找并返回扫描器中的下一个完整标记。
in.nextLine()则会继续搜索输入,寻找行分隔符,如果没有行分隔符,则可能缓冲所有输入以搜索要跳过的行。
Scanner in = new Scanner(System.in);

    //Variables
    int studentId = 0;
    String lastName = "";
    String firstName = "";
    String gradeLetter = "";
    String quit = "";
    double userHomeworkScore = 0.0;
    double userQuizzesScore = 0.0;
    double userMidTermScore = 0.0;
    double userFinalScore = 0.0;
    double homeworkScore = 0.0;
    double quizzesScore = 0.0;
    double midTermScore = 0.0;
    double finalScore = 0.0;
    double totalScore = 0.0;

    do {


        System.out.println("Please enter Student ID");
        studentId = in.nextInt();

        System.out.println("Please enter first name");
        firstName = in.next();



        System.out.println("Please enter last name");
        lastName = in.next();


        System.out.println("Please enter score for the assignments");
        userHomeworkScore = in.nextDouble();

        System.out.println("Please enter score for the quizzes");
        userQuizzesScore = in.nextDouble();

        System.out.println("Please enter score for the midterm");
        userMidTermScore = in.nextDouble();

        System.out.println("Please enter score for the final");
        userFinalScore = in.nextDouble();

        String fullName = (firstName + "," + lastName);

        homeworkScore = (userHomeworkScore * 0.50);
        quizzesScore = (userQuizzesScore * 0.20);
        midTermScore = (userMidTermScore * 0.10);
        finalScore = (userFinalScore * 0.20);

        totalScore = (homeworkScore+quizzesScore+midTermScore+finalScore);

        if (totalScore >= 90)
        {
            gradeLetter = "A";
        }
        else if (totalScore >= 80)
        {
            gradeLetter = "B";
        }
        else if (totalScore >= 70)
        {
            gradeLetter = "C";
        }
        else if (totalScore >= 60)
        {
            gradeLetter = "D";
        }
        else
        {
            gradeLetter = "E";
        }



        //Output
        System.out.println(""+fullName+"");
        System.out.println("Student ID:" + studentId + "");
        System.out.println("Homework:" + homeworkScore + "");
        System.out.println("Quizzes:" + quizzesScore + "");
        System.out.println("Midterm:" + midTermScore + "");
        System.out.println("Final:" + finalScore + "");
        System.out.println("Total Score: " + totalScore + " Grade: " + gradeLetter + "");

        System.out.println("Press any key to enter another student or enter q to quit.");
        quit = in.next();

    }while(!quit.equalsIgnoreCase("q"));

输出:

Please enter Student ID
1
Please enter first name
a
Please enter last name
b
Please enter score for the assignments
100
Please enter score for the quizzes
100
Please enter score for the midterm
100
Please enter score for the final
100
a,b
Student ID:1
Homework:50.0
Quizzes:20.0
Midterm:10.0
Final:20.0
Total Score: 100.0 Grade: A
Press any key to enter another student or enter q to quit.
q

那很有道理。谢谢你的帮助! - K455306

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接