为什么这段代码写/打印所有0.0而不是不同的随机数?

时间:2019-03-30 06:28:56

标签: java file random

我正在尝试生成随机数 并将它们写入文件,然后打印。 而是在控制台中逐行打印所有零(例如0.0) 并在文件中以ASCII码编写。

我已经使用不同的java输入类和随机数生成器进行绑定了。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import java.util.Random;


    public static void main(String[] args) throws IOException {
        makefile(10, "inputHW02.txt");

        double[] sizearray0 = new double[10];
        int i = 0;
        Scanner inFile;

        inFile = new Scanner(new File("inputHW02.txt"));

        while (inFile.hasNextDouble()) {
            sizearray0[i] = inFile.nextDouble();
            i++;
        }

        for (int r = 0; r < sizearray0.length; r++)
            System.out.println(sizearray0[r]);

        inFile.close();
    }

    public static void makefile(double n, String filename) throws IOException {

        FileOutputStream writer = new FileOutputStream(filename);
        DataOutputStream dos = new DataOutputStream(writer);
        Random rand = new Random();

        for (int i = 0; i < n; i++) {
            dos.writeInt((int) 60);
            ;

        }
        if (writer != null) {
            writer.flush();
            writer.close();
        }
    }

我希望文件和输出控制台中的新随机数应分开 诸如 10.0 23.0 1.0 等等。

3 个答案:

答案 0 :(得分:2)

here可以更好地解释为什么我们在PrintWriter上使用DataOutputStream来写入文件的原因。

public static void makefile(double n, String fileName) throws IOException {
    FileWriter fileWriter = new FileWriter(fileName);
    PrintWriter printWriter = new PrintWriter(fileWriter);
    Random rand = new Random();

    for (int i = 0; i < n; i++) {
        printWriter.println(rand.nextDouble());  // <--- observe this
    }
    if (printWriter != null) {
        printWriter.flush();
        printWriter.close();
    }
}

  1. 您没有使用rand
  2. 使用printWriter.println(),它将在每行写入文件后负责添加换行符。

答案 1 :(得分:0)

DataInputStream / DataOutputStream类以二进制格式读取/写入数据。扫描程序以文本格式读取数据。

这意味着您正在将整数60的二进制等效项写入文件,而在读取时,您正在尝试读取字符串“ 60”。

简而言之:

  • 如果您要读取使用DataInputStream写入的数据,请使用DataOutputStream
  • 如果已使用Scanner来写文件,请使用FileReaderFileWriter

答案 2 :(得分:-1)

您的代码未使用rand。如果您遇到这种情况,可以使用PrintWriter或BufferedWriter,它使操作变得更简单