1

スキャナー オブジェクトをメソッドに渡すと、スキャナーは入力の最初からスキャンするか、入力の残りの部分をスキャンし続けますか。これが私のコードです:

public class Test {
  public void test(Scanner sc) {
    System.out.println(sc.nextLine());
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    System.out.println(str);

    Test t = new Test(sc);
    t.test();
  }
}

// here is the input file:
1 2 3 4 
5 6 7 8
9 1 2 3

このコードを Windows と Linux の両方でテストしましたが、2 つの異なる結果が得られました

最初の結果はメソッド テストにあり、5 6 7 8 と出力されます。

2 番目の結果はわかりにくく、1 2 3 4 と出力されますが、それでも入力の最初の行です。

これは Java の異なるバージョンに関連していますか? 誰か説明してくれませんか? ありがとう!

4

3 に答える 3

0

あなたの問題はブレークラインにあると思います。

改行は、OS ごとに異なる方法で定義されます。の値を出力すると

System.getProperty("line.separator");

プロパティの値が Windows と Linux で同じではないことがわかります。

入力ファイルをどこに書き込んだかはわかりませんが、OS 固有の行区切りが含まれている可能性があります。プログラムを別の OS で実行すると、終了しますが、結果は異なります。

スキャナーファイルの区切り文字を次のように定義することをお勧めします

sc .useDelimiter("\n|\r\n");

私が間違っていなければ、\nは Linux の改行を表し、 \r\nは Windows の改行を表します。

于 2013-04-15T12:15:45.140 に答える
0

スキャナーは両方のメソッドで同じオブジェクトです。同じスキャナーへの参照を渡しています。したがって、プログラムの新しい場所から使用されているという手がかりはありません。同じメソッドが呼び出された場合、どのコードがそれを使用していても、忠実に同じことを行います。

于 2013-04-12T01:08:58.210 に答える