2017-07-09 8 views
0

ファイルに100個の乱数を書いて、昇順で表示する必要があります。 PrintWriterはそれらを書き込みますが、ファイルから読み込もうとすると、メソッドhasNext()がfalseを返すので、その理由を理解できません。問題はPrintWriterにあると思います。intをファイルに書き込んで読み込み、hasNext()がfalseを返す

try(PrintWriter output = new PrintWriter(file); 
       Scanner input = new Scanner(file)) { 

      for (int i = 0; i < 100; i++) { 
       output.print((int)(Math.random() * 101) + " "); 
      } 

      int[] numbers = new int[100]; 
      int i = 0; 
      while (input.hasNextInt()) { 
       numbers[i++] = input.nextInt(); 
      } 

      Arrays.sort(numbers); 
      for (int n : numbers) 
       System.out.println(n); 

     } catch (FileNotFoundException ex) { 
      System.out.println("Cannot find the file!"); 
     } 

答えて

3

出力ストリームはflushで、変更がファイルに書き込まれる必要があります。

... 
for (int i = 0; i < 100; i++) { 
    output.print((int) (Math.random() * 101) + " "); 
} 

output.flush(); 
... 

さらに、closeは、この場合には、自動的にストリームをフラッシュします - ので、あなたがtryブロックの後にファイルを読み込むしようとした場合、あなたは変化を見るでしょう。 PrintWriterの場合は、改行が印刷されるたびに(println経由またはprintf/print経由)手動でflushが呼び出されます。

私は通常、リーダーとライターを同時に開くのは良い考えではないと思います。

関連する問題