2012-09-10 38 views
0

我不熟悉Java,我在將一系列隨機數寫入輸出文件時遇到了一些問題。我需要使用RandomAccessFile和writeDouble。這裏是我的代碼的任何想法爲什麼發生這種情況。由於編譯錯誤 - 在Java上使用outputStream

private static void numGenerator(int values){ 
    Random generator = new Random(); 
    for (int i = 0; i < values; i++) { 
     double number = generator.nextInt(200); 
     System.out.println(number); 
     String outFile = "output.txt"; 
     RandomAccessFile outputStream = null; 
     try{ 
      outputStream = new RandomAccessFile(outFile,"rw"); 
     } 
     catch(FileNotFoundException e){ 
      System.out.println("Error opening the file " + outFile); 
      System.exit(0); 
     } 
     number = outputStream.writeDouble(number); //ERROR 
    } 
} 

編輯: 錯誤:類型不匹配:不能從虛空轉換爲加倍

回答

3

錯誤是有道理的。您正在寫入RAF,並根據其API writeDouble方法返回void。你爲什麼要設置一個等於這個的數字?這種說法是沒有意義的:

number = outputStream.writeDouble(number); 

,而不是僅僅做:

outputStream.writeDouble(number); 

另外,爲什麼創建一個新的RAF與循環的每個迭代?難道你不是想在for循環之前創建一個文件並在循環內部添加數據嗎?

另外,爲什麼要使用RAF開始?爲什麼不簡單地使用文本文件?那我跳出

+0

我試圖讓隨機數生成並將它們複製到文件 – JProg

+0

你正在用writeDouble做到這一點。 –

+2

但它不是一個文本文件**它是一個字節文件。我猜你可能會在這裏使用隨機訪問文件來弄錯。 –

2

三兩件事:

  1. 您使用nextInt()代替nextDouble()
  2. 您的IO操作不在try...catch塊內。對拋出任何異常的任何方法的任何調用必須位於try...catch塊內。 (或者,如果您使用的方法有簽名throws Exception,那麼try...catch塊是不必要的,但在某處,您需要處理該異常,如果/當它被拋出時。)
  3. The return value of any of the write methods in RandomAccessFile are void.您將無法使用在一個變量中捕獲它。
+0

一些偉大的建議! 1+ –