web-dev-qa-db-ja.com

Javaスキャナークラス読み取り文字列

私は次のコードを得ました:

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];

for (int i = 0; i < names.length; i++){
  System.out.print("Type a name: ");
  names[i] = in.nextLine();
}

そして、そのコードの出力は次のとおりです。

How many names are you going to save:3 
Type a name: Type a name: John Doe
Type a name: John Lennon

名の入力をスキップしたことに注意してください??それをスキップして、2番目の名前のエントリにまっすぐ進みました。私はこれを引き起こす原因を探してみましたが、私はそれを釘付けできないようです。誰かが私を助けてくれることを願っています。ありがとう

26
marcoamorales

エラーの理由は、nextIntが整数ではなく、改行をプルすることです。 forループの前にin.nextLine()を追加すると、空の新しい行が使用され、3つの名前を入力できるようになります。

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();

names = new String[nnames];
in.nextLine();
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}

または、単に行を読み取って値を整数として解析します。

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = Integer.parseInt(in.nextLine().trim());

names = new String[nnames];
for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}
26
Joshua

sc.nextLine()を使用します。文字列の最後の行を読み取ることができるように2回

sc.nextLine()sc.nextLine()

5
Ankur Nirmalkar

In.nextInt()が行を変更しないためです。したがって、最初に「Enter」を押して(3を押した後)、ループ内のin.nextLine()によってendOfLineが読み取られます。

ここで行うことができる小さな変更:

int nnames;
    String names[];

    System.out.print("How many names are you going to save: ");
    Scanner in = new Scanner(System.in);
    nnames = Integer.parseInt(in.nextLine());
    names = new String[nnames];

    for (int i = 0; i < names.length; i++){
            System.out.print("Type a name: ");
            names[i] = in.nextLine();
    }
2
Nettogrof

これはin.nextInt()がint番号のみを受け取り、新しい行を受け取らないためです。 3を入力してEnterキーを押すと、行末がin.nextline()によって読み取られます。

ここに私のコードがあります:

int nnames;
String names[];

System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
in.nextLine();
names = new String[nnames];

for (int i = 0; i < names.length; i++){
        System.out.print("Type a name: ");
        names[i] = in.nextLine();
}
2
wangzhengyi

単純に置き換えることができます

names[i] = in.nextLine(); with names[i] = in.next();

Next()を使用すると、スペースの前にあるもののみが返されます。 nextLine()は、現在の行を返した後、スキャナーを自動的に下に移動します。

0
Angelin Nadar