0

課題の質問があり、最終的な答えを得ることができませんでした。

質問は次 のとおりです。DataOutputStreamのwriteInt(int)メソッドを使用して、ランダムに生成された100個の整数をバイナリファイルに書き込むプログラムを作成します。ファイルを閉じます。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();

    }
}
4

4 に答える 4

0

1つの整数を読み取ろうとしている以下のコードを試してください。

   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++)
于 2013-03-24T23:16:09.727 に答える
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();
}
于 2013-03-24T23:31:51.277 に答える
0

コードを有機化するために問題を部分的に分割してみてください。コードを閉じる前に、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());
        }
    }
}
}
于 2013-03-25T02:34:36.013 に答える
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;

public classCreateBinaryIO{//バイナリファイルを作成しますpublicstaticvoid main(String [] args)throws ClassNotFoundException、IOException {DataOutputStream output = new DataOutputStream(new FileOutputStream( "myData.dat")); ランダムrandomno=new Random();

for(int i=0;i<100;i++){       output.writeInt(randomno.nextInt(100));     }// Loop i closed   output.close(); }    }
于 2013-03-27T04:12:29.440 に答える