Java の Scanner で入力がブロックされるのを解決する方法
JavaのScannerの入力が止まってしまうのは、通常、入力待ちの処理が完了していないことが原因です。これは、入力バッファに読み込めるだけの十分なデータがないか、入力を読み込む前にScannerの適切なメソッドが呼び出されていない場合に発生します。
以下に可能な解決策を示します。
- スキャナーオブジェクトを使用して入力を取得する正しいメソッドを使用していることを確認してください。一般的なメソッドとしては、取得する型や入力のフォーマットによって、next()、nextInt()、nextLine() などがあります。
- スキャナに対する適宜なメソッドの呼び出しを、入力をリードする前に呼び出すのを忘れないように注意してください。例えば、nextInt()メソッドを使って整数を読み込むのに、実際には文字列が入力された場合、プログラムはハングします。
- 入力フォーマットがコードの想定と合致していないと、ハングアップする可能性があります。入力されるデータ型がコードで想定されている型と合致していることと、入力のフォーマットが正しいことを確認してください。
- nextLine()メソッドで入力を取得する場合は、next()やnextInt()などのメソッドをそれ以前に使用していた場合、入力バッファをクリアするために余分にnextLine()を呼び出す必要があるかもしれません。これは、next()、nextInt()などのメソッドは入力の一部のみを読み取り、nextLine()は入力行全体を読み取ることによるものです。そのため、next()メソッドを以前に使用した場合は、入力バッファをクリアするためにnextLine()を呼び出す必要があります。さもないと、ハングアップが発生します。
- 入力をリードする前にまだストリームが閉じられていないのを確保する。もし入力が閉じられている場合、入力のリード時にリードのハングアップを引き起こす。入力をリードする前にまだストリームが閉じられていないのを確保する。
上記方法で問題が解決しない場合は、コードの他の部分にどこかに引っかかった原因はないか確認する必要があります。