Java割り当ては、複数行の入力を処理する必要があります。「入力はstdinから読み取られます」という指示に取り組んでいます。
サンプル入力の例を示します。
one 1
two 2
three 3
上記のサンプル入力「stdinから読み取る」の意味がわかりません。
これが私の混乱を分離するために私が書いたテストプログラムです:
import Java.io.*;
import Java.util.Scanner;
class Test
{
public static void main(String[] args)
{
Scanner stdin = new Scanner(System.in);
while(stdin.hasNextLine())
{
String line = stdin.nextLine();
String[] tokens = line.split(" ");
System.out.println(Integer.parseInt(tokens[1]));
}
}
このプログラムをコンソールで実行すると、入力を待機し、行を入力するたびに、期待どおりにエコーバックします。したがって、上記のサンプル入力は、この方法で3行のそれぞれを入力することによって達成されるのではないかと思いました。ただし、プロセスを終了する方法はないようです。 3行を入力した後、入力を終了するにはどうすればよいですか? Enterキーを2回押してみましたが、改行文字のみで構成される行として読み取られているようです。この行は、期待する2トークン形式に適合しないため、エラーが発生します。
コンソールの相互作用は次のようになります。
javac Test.Java
java Test
one 1
1
two 2
2
three 3
3
Exception in thread "main" Java.lang.ArrayIndexOutOfBoundsException: 1
at Test.main(Test.Java:13)
私の理解のギャップを指摘するのに助けていただければ幸いです。
import Java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
String line;
Scanner stdin = new Scanner(System.in);
while(stdin.hasNextLine() && !( line = stdin.nextLine() ).equals( "" ))
{
String[] tokens = line.split(" ");
System.out.println(Integer.parseInt(tokens[1]));
}
stdin.close();
}
}
幸運を!
値をファイルに入れることもできます。 input.txtと実行:
Java Test < input.txt
シェルから Ctrl-D を押すと、stdinが閉じます。または、パイプ入力
cat your-input-file | Java Test
入力を停止するには、ユーザーにquitを入力して終了するように求め、入力にその文字列が存在するかどうかをテストして、見つかったときにループを終了するか、ループ内のカウンターを使用して、次のときにループを終了します。最大反復回数に達しました。 break
ステートメントを使用すると、ループから抜け出すことができます。