1

同様の質問が投稿された場​​合は申し訳ありませんが、見つかりませんでした。これが私のコードです:

import java.util.*;

public class InputArraysNextLine
{
    static Scanner q = new Scanner(System.in);

    public static void main(String[] args)
    {
        System.out.print("n = ");
        int n = q.nextInt();

        int[] a = new int[n];
        String[] b = new String[n];

        for (int i = 0; i < n; i++)
        {
            System.out.print("Enter student name: ");
            b[i] = q.nextLine();

            q.next();
            System.out.print("Enter student number: ");

            a[i] = q.nextInt();
        }


        for (int i : a)
            System.out.print(i + " ");
        System.out.println();
        for (String j : b)
            System.out.print(j + " ");
    }
}

アレイaとbの両方をコンソールに表示するつもりでしたが、aだけが表示されています。nextLine()メソッドはこれと関係があると思います。コンソールに「学生名を入力してください:」と表示されたときに実際に何かを入力できたとしても、プログラムは入力をb文字列に保存しません。

4

3 に答える 3

1

Scanner.nextInt()は改行を消費しないためnextLine()、int を取得した後に呼び出してスキップする必要があります。next()また、 を呼び出した後に呼び出す必要はありませんnextLine()

for (int i = 0; i < n; i++)
{
    System.out.print("Enter student name: ");
    b[i] = q.nextLine().trim(); // b is the whole line, trim() removes leading and trailing whitespace

    System.out.print("Enter student number: ");
    a[i] = q.nextInt();
    q.nextLine(); // nextInt() does not 
}

また、いくつかのものを取得できることを期待するループを実行するだけでも少し危険であることに注意する必要があります-クラッシュを避けるために、取得する前に物事を確認する必要があります(たとえば、入力ストリームが早期に終了した場合) )。チェックは、トークン、行、整数などのhas関数を使用して行うことができます。hasNext()hasNextLine()hasNextInt()

于 2012-11-13T21:45:49.133 に答える
0

あなたは試して置き換える必要があります:

b[i] = q.nextLine();
q.next();

と:

b[i] = q.next();

ストリームでスキップされた入力を返すのでq.nextLine()、ここではそうではありません。

于 2012-11-13T21:21:11.443 に答える
0

q.nextLine javadoc には、「このスキャナは現在の行を超えて進み、スキップされた入力が返されます」と記載されています。ユーザーが入力した入力を取得する機能。

したがって、 b[i] でキャプチャされたものを逆にする必要があります

b[i] = q.nextLine(); q.next()

b[i] = q.next(); q.nextLine();

于 2012-11-13T21:29:50.210 に答える