3

入力サイズがまだわからない場合、JAVA で使用可能になるまでループを繰り返し続ける方法は何ですか。C++ では、次のように実行できます。

int main(){
    int val;
    while(cin >> val){
           //do stuff
    } 
}

Javaで(上記のように)同様のことを行う方法は何ですか

前もって感謝します。シャンタヌ

4

5 に答える 5

1

1 つの方法は、スキャナーを使用することです。

long val;
Scanner sc=new Scanner(System.in);
while (sc.hasNextLong() ) {
    val = sc.nextLong();
    // do stuff
}

これは、提供した cpp コードと同等です。しかし、正確にはあなたが求めたものではありません。読み取り文字列に正当な入力がある限り、ループします。

于 2012-05-13T08:09:52.970 に答える
1

次のことを試してください。

    long val;
    Scanner sc = new Scanner(System.in).useDelimiter("\n");
    while (sc.hasNext()) {
        String temp = sc.next().trim();

        val = Long.parseLong(temp);
        // do stuff
    }
于 2012-05-13T08:12:40.117 に答える
0

特定の要件に応じて、 Scanner クラスのメソッドを使用します。これは行全体を読み取ります。つまり、ユーザーはほとんどのシステムで Enter キーを押す必要があります。

public static void main(String[] args)
{
    String str=new Scanner(System.in).nextLine();
}
于 2012-05-13T08:09:39.650 に答える
0

ビジー ループを実装しないでください。おそらくストリームを使用することを好むでしょう。ストリームのメソッドread()はデータが到着するまでブロックされるため、コードはビジー ループのないシンプルなものになり、必要に応じて正確に動作します。

while ( in.read() != -1) {
   // do your stuff
}

またはバッファを使用するとさらに良い:

byte[] buf = new buf[MAX_SIZE]
while ( in.read(buf) != -1) {
   // do your stuff
}
于 2012-05-13T08:10:04.323 に答える
0

あなたの目的を果たす最善の方法は、1つのスレッドがユーザーからの入力を待ち、もう一方のスレッドが入力を受け取ったときにそれを知らせるマルチスレッドを使用することだと思います。その間、他のスレッドはループを反復し続けます。

于 2012-05-13T08:21:32.453 に答える