1
import java.util.Scanner;

public class ClassList {

    static final int SIZE = 10;

    public static void main(String Args[]) {

        Student[] students = new Student[SIZE];
        Scanner s = new Scanner(System.in);

        String name, id;
        float gpa;

        do {

            System.out.println("Enter a Student");
            name = s.nextLine();

            System.out.println("Enter a ID");
            id = s.nextLine();

            System.out.println("Enter a GPA");
            gpa = s.nextFloat();

        } while(!name.equals("quit"));
    }
}

基本的に、このプログラムを実行すると、1回正常に実行され、2回目の反復で学生名が要求されます。ただし、ユーザーが入力する場所をスキップして、「IDの取得」に進みます。どうすればそれを止めることができますか。

4

2 に答える 2

3

最初の反復では、nextFloat()改行文字を消費しません。2回目の反復では、nextLine()メソッドは最初の反復で残った改行文字を消費します。その結果、nextLine()2回目の反復のメソッドはユーザー入力をスキップしているように見えますが、前の反復で残った改行文字を消費しているだけです。

この問題を解決する1つの方法は、nextLine()後に呼び出しnextFloat()て、残った改行文字を消費することです。

于 2012-11-29T23:30:56.250 に答える
1

あなたが置くことができます

s.nextLine();

ループの最後で改行文字を消費します。現在Scanner.getFloat()、改行文字をステートメントに渡しています。

name = s.nextLine();

このキャラクターで提供されているため、ブロックされていません。

于 2012-11-29T23:31:03.537 に答える