質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

20982閲覧

ScannerクラスのnextIntの後でnextLine()を使うと認識されない。

publicstatic

総合スコア23

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

3クリップ

投稿2017/12/27 10:52

ある問題なのですが、
標準入力で
3
a b c

と与えられています。
abcの英数字の隙間は半角スペースで開いています。
この入力をscannerで読み込むときに

1 Scanner sc = new Scanner(System.in);
2 int n = sc.nextInt();
3 String line = sc.nextLine();
4 String array[] = line.split(" ");
5 System.out.println(array[0]);

とすると3行目のを入力する間もなく終了しました。

比較として
a b c

だけで
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
String array[] = line.split(" ");
System.out.println(array[0]);

とするとaが表示されました。

nextInt()の後にnextLine()とすると2行目の文字列は読み込むことができないのでしょうか?
また理由はなんなのでしょうか?

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード
java
ここにご自身が実行したソースコードを書いてください

###試したこと 別の解法で Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String a[] = new String[3]; for(int i=0;i<3;i++){ a[i] = sc.next(); } System.out.println(a[0]); これで3回入力はできて表示もでたのですがnextLineがだめな理由がわかりません。 nextLineで空白を含む文字列を読み込むという認識はあります。 ###補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
vitabrevisarsl1👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

nextIntで数値を読み込んだ際、改行文字が残ってしまっているためです。
一番簡単な解決策は、nextLineを用いてそれを空読みすることかと思います。

Java

1Scanner sc = new Scanner(System.in); 2int n = sc.nextInt(); sc.nextLine(); 3 4String array[] = sc.nextLine().split(" "); 5System.out.println(Arrays.asList(array)); 6 7sc.close();

Scannerをインスタンス化する場合、最後にcloseしてあげるのを忘れないでください。


なお、こんな質問を見つけたのでご紹介しておきます。
こちらでは、また別の解法も回答されています。
StackOverflow
Scanner is skipping nextLine() after using next(), nextInt() or other nextFoo()?

nextで上手くいく理由

Scanner#nextは、有効なトークンを読み込んでくれるようです。

投稿2017/12/27 11:15

編集2017/12/27 11:41
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

publicstatic

2017/12/28 01:42

回答ありがとうございます。 あとで調べたところ別のHPに改行について書いてあったのをみたのですが解決方法がわからなかったので助かりました。またcloseしなければまずいというのは初めて見ました。scannerクラスを使うときは注意してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問