【问题标题】:Why does this piece of code write/print all 0.0 instead of different random numbers?为什么这段代码写/打印全 0.0 而不是不同的随机数?
【发布时间】:2019-03-30 06:28:56
【问题描述】:

我正在尝试生成随机数 并将它们写入文件,然后打印它们。 而是在控制台中逐行打印所有零(例如 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 等等。

【问题讨论】:

  • 你从不使用rand...
  • 另外,如果您希望找到以字符串形式写入并以空格分隔的双精度值,那么您应该将其写入文件,例如使用 PrintWriter。
  • @Zephyr 这很有趣,因为它是真的
  • @Zephyr ,在帖子中阅读我尝试过的东西并引用“我已经尝试过使用不同的 Java 输入类和使用随机数生成器”。我只是没有从之前删除那行。
  • @ave4496 这很有趣,因为你也没读过。

标签: java file random


【解决方案1】:

我们使用PrintWriter 而不是DataOutputStream 写入文件的原因更好地解释here

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() 负责在每行写入文件后添加一个换行符。

【讨论】:

  • 谢谢!
【解决方案2】:

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

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

简而言之:

  • 如果您正在读取使用DataOutputStream 写入的数据,请使用DataInputStream
  • 如果您使用FileWriter 写入文件,请使用ScannerFileReader

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2011-07-01
    相关资源
    最近更新 更多