質問: new int[n*m]; for(int i =0;i
回答: Scannerクラスはコンストラクターに渡した入力ストリームから文字を「先読み」します。 先読みというのは実際にデータが必要になる前にずっと先の方まで読み込んでしまう動作のことを言います。 この例でいいますとmainメソッドの最初のnextIntの呼び出し時にコンソールから入力した4行分の文字は全てmainメソッドで生成したScannerインスタンスが読み込んでしまいます。 同じ入力元(System.in)からスキャンするのであれば別々のScannerインスタンスを生成してはならず、常に同一のScannerインスタンスを用いなければなりません。 質問者さんのコードに当てはめるなら、sekiメソッドへmainメソッドからScannerインスタンスを引数として渡せば期待通りに動きます。 追記:他の方の回答と矛盾してはいないと思うので追記しました。 自分が動かしたときは、質問者さんと同様に「最初に4行分をコピー&ペーストでコンソールへ張り付ける」ということをしました。こうするとmainメソッドの最初のnextIntでSystem.inから4行分全部読み込まれてしまいます。 ScannerはInputStreamから文字をデコードするためにデフォルトで1024文字分のバッファーを持っており、InputStreamから読み込めるだけそのバッファーへ文字をデコードしてしまいます。よって最初に1行しか入力しない状態で動かせばオリジナルのコードのままでも動きます。それが他の方の回答にある内容だと思います。 しかし前述のとおり最初から4行分をコピー&ペーストで入力すると期待通りには動きませんので、Scannerのインスタンスを複数作らないのがプログラムとしての正しい対処だと思います。