清除缓冲区,输出名字,姓氏
Clearing the buffer, output firstname,lastname
所以我的程序有问题。如果我删除 in.nextLine
名字和姓氏 println's 将一个接一个地打印,如果我有它,它不会在我的输出中打印名字,因为我认为它正在删除它。任何帮助将不胜感激。
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"));
}
}
读取整数后需要"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();
您不需要 "flush" 在两行读数之间。
这是错误的:
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()
查找并 returns 来自扫描器的下一个完整令牌。
而 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
所以我的程序有问题。如果我删除 in.nextLine
名字和姓氏 println's 将一个接一个地打印,如果我有它,它不会在我的输出中打印名字,因为我认为它正在删除它。任何帮助将不胜感激。
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"));
}
}
读取整数后需要"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();
您不需要 "flush" 在两行读数之间。 这是错误的:
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()
查找并 returns 来自扫描器的下一个完整令牌。
而 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