Почему этот фрагмент кода записывает / печатает все 0.0 вместо разных случайных чисел? - PullRequest
2 голосов
/ 30 марта 2019

Я пытаюсь сгенерировать случайные числа и записать их в файл, а затем распечатать их.Вместо этого все нули, такие как этот 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 ]

2 голосов
/ 30 марта 2019

Причина, по которой мы используем 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(), который позаботится о добавлении символа новой строки после каждой строкизаписывается в файл.
0 голосов
/ 30 марта 2019

Классы DataInputStream / DataOutputStream читают / записывают данные в двоичном формате. Принимая во внимание, что сканер считывает данные в текстовом формате.

Это означает, что вы записываете двоичный эквивалент целого числа 60 в файл, и во время чтения вы пытаетесь прочитать строку символов "60".

Короче говоря:

  • Используйте DataInputStream, если вы читаете данные, записанные с использованием DataOutputStream.
  • Используйте Scanner или FileReader, если вы использовали FileWriter для записи файла.
0 голосов
/ 30 марта 2019

Ваш код не использует rand.Если бы я был в вашей ситуации, я бы использовал PrintWriter или BufferedWriter, это упрощает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...