有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

读一本书。用Java将dat文件转换为数组

我正在编写的代码有两个类:writeInts和readInts。我写了写东西,随机生成100个介于0和1000之间的数字,并将它们输出到一个数据集。dat文件

readInts应该打开DataInputStream对象,并从数据中读取“原始”数据。dat文件并将100个整数存储在一个数组中。我的问题是,我似乎无法正确读取数据。如果您有任何帮助,我们将不胜感激。谢谢

作者:

import java.io.*;


public class WriteInts {
    public static void main(String[] args) throws IOException {
        DataOutputStream output = new DataOutputStream(new FileOutputStream("data.dat"));
        int num = 0 + (int)(Math.random());
        int[] counts = new int[100];
        for(int i=0; i<100; i++) {
            output.writeInt(num);
            counts[i] += num;

            System.out.println(num);
        }
        output.close();
    }

}

阅读材料:

import java.io.*;
import java.util.*;

public class ReadInts {
    public static void main(String[] args) throws IOException {

        // call the file to read
        Scanner scanner = new Scanner(new File("data.dat"));
        int[] data = new int[100];
        int i = 0;
        while (scanner.hasNextInt()) {
            data[i++] = scanner.nextInt();

            System.out.println(data[i]);

            scanner.close();
        }

    }

}

共 (3) 个答案

  1. # 1 楼答案

    更多。如果要生成0到1000(包括0和1000)范围内的随机数,请使用以下语句:

    int rndNum = (int) (Math.random() * 1001);
    

    它是这样工作的:数学。random()生成一个从0到1(独占)的双精度范围,然后应该将其映射到整数范围和下限。如果你希望你的最大值是1000,你把它乘以1001-1001本身被排除在外

    是的,就像这样:

    import java.io.*;
    
    public class WriteRandomInts {
        public static void main(String[] args) throws IOException {
            DataOutputStream output = new DataOutputStream(new FileOutputStream(
                    "data.dat"));
    
            for (int i = 0; i < 100; i++) {
                int rndNum = (int) (Math.random() * 1001);
                output.writeInt(rndNum);
                System.out.println(rndNum);
            }
    
            output.close();
        }
    }
    
  2. # 2 楼答案

    如果要写入二进制数据,请使用DataInputStream/DataOutputStreamScanner用于文本数据,不能混用

    作者:

    import java.io.*;
    
    public class WriteInts {
        public static void main(String[] args) throws IOException {
            DataOutputStream output = new DataOutputStream(new FileOutputStream(
                    "data.dat"));
    
            for (int i = 0; i < 100; i++) {
                output.writeInt(i);
                System.out.println(i);
            }
    
            output.close();
        }
    
    }
    

    阅读材料:

    import java.io.DataInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class ReadInts {
        public static void main(String[] args) throws IOException {
            DataInputStream input = new DataInputStream(new FileInputStream(
                    "data.dat"));
    
            while (input.available() > 0) {
                int x = input.readInt();
                System.out.println(x);
            }
    
            input.close();
        }
    
    }
    
  3. # 3 楼答案

    我建议你放弃DataInputStreamDataOutputStream

    使用FileWriter将一个int写入一行,并使用BufferedReader读取它们,每行一个。这是一个容易的问题