Javaのスキャナクラスの読み取り文字列
-
13-09-2019 - |
質問
私は、次のコードを得ました
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番目の名前のエントリに対してまっすぐに行ってきました。私はこれを引き起こすもの探して試してみましたが、私はそれを爪することはできていないようです。私は誰かが私を助けることができると思います。おかげ
解決
エラーの理由は、nextIntのみ整数ではなく、改行を引っ張ることです。前に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();
}
他のヒント
)sc.nextLineを(使用。 2時間我々は、文字列の最後の行を読むことができるように、
sc.nextLine() sc.nextLine()
in.nextIntは()の行を変更していないためにです。ですから、最初にあなたのループであなたのin.nextLineによって読み取らendOfLineを()(あなたは3を押した後)「を入力します」原因ます。
あなたが行うことができます。ここで小さな変更:
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();
}
これは、新しい行を受信しません。だから、入力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();
}
あなたは単に置き換えることができた。
names[i] = in.nextLine();
とnames[i] = in.next();
)(次を使用することでのみ、スペースの前に来るものが返されます。 nextLine()は、自動的に現在の行を戻した後、スキャナを下に移動します。