2013-03-24 51 views
0

我有任務的問題我無法得到最終答案。生成整數到一個二進制文件

的問題是: 編寫一個程序,將寫100個隨機產生的整數 使用writeInt(int)方法在 DataOutputStream類的二進制文件。關閉文件。使用 DataInputStream和BufferedInputStream打開文件。讀取整數 值,就好像該文件包含未指定的數字(忽略 您編寫該文件的事實)並報告數字的總和和平均值 。

我相信我完成了問題的第一部分(寫入文件),但我不知道如何報告總和。

到目前爲止,這是我有

import java.io.*; 

public class CreateBinaryIO { 
public static void main(String [] args)throws IOException { 
    DataOutputStream output = new DataOutputStream(new FileOutputStream("myData.dat")); 
    int numOfRec = 0 + (int)(Math.random()* (100 - 0 +1)); 
    int[] counts = new int[100]; 
    for(int i=0;i<=100;i++){ 
     output.writeInt(numOfRec);  
     counts[i] += numOfRec; 
    }// Loop i closed 
    output.close(); 
} 

} 

這ReadBinaryIO類:

import java.io.*; 


public class ReadBinaryIO { 
    public static void main(String [] args)throws IOException { 
     DataInputStream input = new DataInputStream (new BufferedInputStream(new FileInputStream("myData.dat"))); 

     int value = input.readInt(); 

     System.out.println(value + " "); 
     input.close(); 

    } 
} 
+0

好了,通過文件循環,直到沒有'int's留和循環的同時,他們全部加起來 – 2013-03-24 22:57:53

回答

0
int numOfRec = 0 + (int)(Math.random()* (100 - 0 +1)); 

那不是產生一個隨機數除以文件的大小。看看java.util.Random.nextInt()

int[] counts = new int[100]; 
for(int i=0;i<=100;i++){ 
    output.writeInt(numOfRec);  
    counts[i] += numOfRec; 
}// Loop i closed 

這實際上西港島線中斷,因爲你正在使用i<=100,而不是僅僅i<100,但我不知道爲什麼你填充該數組開始?此外,該代碼只寫了101次相同的數字。該隨機數的生成需要在循環內部,因此每次生成一個新的隨機數。

至於回讀,您可以通過文件循環利用這樣的循環:

long total = 0; 
while (dataInput.available() > 0) { 
    total += dataInput.readInt(); 
} 
+0

這是非常有益的。 ,謝謝你們......我遵循你的通知,我相信我做了正確的任務。 – Muni 2013-03-27 04:07:33

0

嘗試下面的代碼,你試圖讀取一個整數:

DataInputStream input = new DataInputStream (new BufferedInputStream(new FileInputStream("myData.dat"))); 

    int sum = 0; 
    for(int i =0; i<=100; i++){ 
     int value = input.readInt(); 
     sum += value; 
    } 

    System.out.println(value + " "); 
    input.close(); 

或者,如果你想要動態設置for循環的長度然後

創建MYDATA.DAT文件的File對象,然後用32位

File file = new File("myData.dat"); 
    int length = file.length()/32; 

    for(int i =0; i <= length;i++) 
0

試圖分裂中的部分問題organice你的代碼,別忘了刷新OutputStream在關閉之前。

package javarandomio; 


import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.Random; 

public class JavaRandomIO { 

public static void main(String[] args) { 

    writeFile(); 
    readFile(); 
} 

private static void writeFile() { 
    DataOutputStream output=null; 
    try { 
     output = new DataOutputStream(new FileOutputStream("myData.txt")); 
     Random rn = new Random(); 
     for (int i = 0; i <= 100; i++) { 
      output.writeInt(rn.nextInt(100)); 
     } 
     output.flush(); 
     output.close(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } finally{ 
     try{ 
      output.close(); 
     }catch(Exception e){ 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

private static void readFile() { 
    DataInputStream input=null; 
    try { 
     input = new DataInputStream(new FileInputStream("myData.txt")); 
     int cont = 0; 
     int number = input.readInt(); 
     while (true) { 
      System.out.println("cont =" + cont + " number =" + number); 
      if (input.available() == 4) { 
       break; 
      } 
      number = input.readInt(); 
      cont++; 
     } 
     input.close(); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } finally{ 
     try{ 
      input.close(); 
     }catch(Exception e){ 
      System.out.println(e.getMessage()); 
     } 
    } 
} 
} 
0

到目前爲止,我提交的作業,我想我得到了。

/** Munti ... Sha 
course code (1047W13), assignment 5 , question 1 , 25/03/2013, 

This file read the integer values as if the file contained an unspecified number (ignore 
the fact that you wrote the file) and report the sum and average of the numbers. 
*/ 

import java.io.*; 
public class ReadBinaryIO { 
    public static void main(String [] args)throws ClassNotFoundException, IOException { 
     //call the file to read 
     DataInputStream input = new DataInputStream (new BufferedInputStream(new FileInputStream("myData.dat"))); 
     // total to count the numbers, count to count loops process 
     long total = 0; 
     int count = 0; 
     System.out.println("generator 100 numbers are "); 
     while (input.available() > 0) { 
      total += input.readInt(); 
      count ++; 
      System.out.println(input.readInt()); 

     } 
     //print the sum and the average 
     System.out.println("The sum is " + total); 
     System.out.println("The average is " + total/count); 

     input.close(); 

    } 

} 

CreateBinaryIO類別:

進口java.io. *; import java.util.Random;

公共類CreateBinaryIO {//創建二進制文件公共靜態 無效的主要(字串[] args)拋出ClassNotFoundException的,IOException異常{ DataOutputStream類輸出=新DataOutputStream類(新 FileOutputStream中(「MYDATA的。DAT「)); 隨機randomno =新的隨機();

for(int i=0;i<100;i++){  output.writeInt(randomno.nextInt(100));  }// Loop i closed output.close(); } }