gpt4 book ai didi

Java String Scanner 输入不等待信息,直接移动到下一条语句。如何等待信息?

转载 作者:IT老高 更新时间:2023-10-28 21:21:25 26 4
gpt4 key购买 nike

我正在编写一个简单的程序,它提示用户输入学生人数,然后要求用户输入每个学生的姓名和分数,以确定哪个学生的分数最高。

我已经编写了程序代码并且可以编译。第一行询问一些学生并等待输入。第二行应该询问学生姓名并等待输入,然后第三行应该打印 ans ask for that student's score, and waiting for input 但在第二行打印后,第三行立即被调用(第二行确实不等待输入),然后在第三行之后尝试输入请求的信息时出现运行时错误。

如何调整代码,以便打印第二行并等待输入字符串,然后再打印第三行?

import java.util.Scanner;

public class HighestScore {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

System.out.print("Enter the number of students: ");
int numOfStudents = input.nextInt();

System.out.print("Enter a student's name: ");
String student1 = input.nextLine();

System.out.print("Enter that student's score: ");
int score1 = input.nextInt();

for (int i = 0; i <= numOfStudents - 1; i++) {

System.out.println("Enter a student's name: ");
String student = input.nextLine();

System.out.println("Enter that student's score: ");
int score = input.nextInt();

if (score > score1) {
student1 = student;
score1 = score;
}
}
System.out.println("Top student " +
student1 + "'s score is " + score1);
}
}

最佳答案

这就是我不喜欢使用Scanner的原因,因为这种行为。 (一旦我了解了发生的事情并对此感到满意,我就会非常喜欢 Scanner。

发生的情况是,对 nextLine() 的调用首先完成了用户输入学生人数的那一行。为什么?因为 nextInt() 只读取一个 int 并没有完成这一行。

所以添加一个额外的 readLine() 语句就可以解决这个问题。

System.out.print("Enter the number of students: ");
int numOfStudents = input.nextInt();

// Skip the newline
input.nextLine();

System.out.print("Enter a student's name: ");
String student1 = input.nextLine();

正如我已经提到的,我不喜欢使用 Scanner。我以前做的是使用 BufferedReader。这是更多的工作,但实际发生的事情要简单得多。您的应用程序将如下所示:

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

System.out.println("Enter the number of students: ");
int numOfStudents = Integer.parseInt(input.readLine());

String topStudent = null;
int topScore = 0;
for (int i = 0; i < numOfStudents; ++i)
{
System.out.print("Enter the name of student " + (i + 1) + ": ");
String student = input.nextLine();

// Check if this student did better than the previous top student
if (score > topScore)
{
topScore = score;
topStudent = student;
}
}

关于Java String Scanner 输入不等待信息,直接移动到下一条语句。如何等待信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7877529/

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