Java String Scanner输入不等待信息,直接移动到下一个语句。如何等待信息? [英] Java String Scanner input does not wait for info, moves directly to next statement. How to wait for info?

查看:165
本文介绍了Java String Scanner输入不等待信息,直接移动到下一个语句。如何等待信息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am writing a simple program that prompts a user to enter a number of students, then asks the user to enter each student's name and score in order to determine which student has the highest score.

我编写了程序代码并编译。第一行要求一些学生并等待输入。第二行应该是要求学生姓名并等待输入,然后第三行应打印ans询问该学生的分数,并等待输入但是在第二行打印后,第三行立即被调用(第二行确实不等待输入)然后在第三行之后尝试输入所请求的信息时出现运行时错误。

I have written the program code and it compiles. First line asks for a number of students and waits for input. The second line is supposed to ask for a student name and wait for input, then a third line should print ans ask for that student's score, and wait for input but after the second line prints, the third line is immediately called (2nd line does not wait for input) and then I get a runtime error when trying to enter the requested information after the third line.

如何调整代码以便第二行在打印第三行之前打印并等待输入字符串?

How do I adjust the code so that the second line prints and waits for a string to be entered before printing the third line?

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。)

That's why I don't didn't like using a Scanner, because of this behavior. (Once I understood what was happening, and felt comfortable with it, I like Scanner a lot).

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

What is happening is that the call to nextLine() first finishes the line where the user enters the number of students. Why? Because nextInt() reads only one int and does not finish the line.

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

So adding an extra readLine() statement would solve this problem.

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();






正如我已经提到的,我不喜欢使用扫描仪。我以前做的是使用BufferedReader。这是更多的工作,但实际发生的事情稍微简单一些。您的应用程序如下所示:


As I already mentioned, I didn't like using Scanner. What I used to do was to use a BufferedReader. It's more work, but it's slightly more straightforward what is actually happening. Your application would look like this:

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输入不等待信息,直接移动到下一个语句。如何等待信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆