teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/07/01 02:01

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -5,4 +5,13 @@
5
5
 
6
6
  同じ入力元(System.in)からスキャンするのであれば別々のScannerインスタンスを生成してはならず、常に同一のScannerインスタンスを用いなければなりません。
7
7
 
8
- 質問者さんのコードに当てはめるなら、sekiメソッドへmainメソッドからScannerインスタンスを引数として渡せば期待通りに動きます。
8
+ 質問者さんのコードに当てはめるなら、sekiメソッドへmainメソッドからScannerインスタンスを引数として渡せば期待通りに動きます。
9
+
10
+ ---
11
+ 追記:他の方の回答と矛盾してはいないと思うので追記しました。
12
+
13
+ 自分が動かしたときは、質問者さんと同様に「最初に4行分をコピー&ペーストでコンソールへ張り付ける」ということをしました。こうするとmainメソッドの最初のnextIntでSystem.inから4行分全部読み込まれてしまいます。
14
+
15
+ ScannerはInputStreamから文字をデコードするためにデフォルトで1024文字分のバッファーを持っており、InputStreamから読み込めるだけそのバッファーへ文字をデコードしてしまいます。よって最初に1行しか入力しない状態で動かせばオリジナルのコードのままでも動きます。それが他の方の回答にある内容だと思います。
16
+
17
+ しかし前述のとおり最初から4行分をコピー&ペーストで入力すると期待通りには動きませんので、Scannerのインスタンスを複数作らないのがプログラムとしての正しい対処だと思います。