gpt4 book ai didi

java - 清除缓冲区,输出名字,姓氏

转载 作者:搜寻专家 更新时间:2023-11-01 03:50:37 29 4
gpt4 key购买 nike

所以我的程序有问题。如果我删除 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"));


}

最佳答案

您需要在读取整数后“刷新”缓冲区。原因是当您使用 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

关于java - 清除缓冲区,输出名字,姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738886/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com