You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段Java代码输出全为0.0而非不同随机数?

问题分析与修复方案

我来帮你拆解下代码里的问题,以及怎么调整才能得到你想要的随机数输出:

核心问题出在哪?

  1. 根本没生成随机数:你的makefile方法里循环写入的是固定值(int)60,完全没用到Random类生成随机数,这是第一个致命问题。
  2. 流的读写不匹配:你用DataOutputStream.writeInt()把整数以二进制格式写入文件,但读取时用Scanner去解析文本格式的数字——Scanner根本识别不了二进制内容,导致数组 sizearray0始终是默认的0.0值,控制台自然全输出0.0。

修复方案1:写入文本格式的随机数(适合用Scanner读取)

这种方式生成的文件是人类可读的文本,和你预期的每行一个数字的形式一致:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Random;

public class RandomNumberHandler {
    public static void main(String[] args) throws IOException {
        makefile(10, "inputHW02.txt");
        double[] sizearray0 = new double[10];
        int i = 0;
        Scanner inFile = new Scanner(new File("inputHW02.txt"));
        
        while (inFile.hasNextDouble()) {
            sizearray0[i] = inFile.nextDouble();
            i++;
        }
        
        for (double num : sizearray0) {
            System.out.println(num);
        }
        inFile.close();
    }

    public static void makefile(int n, String filename) throws IOException {
        // 用PrintWriter写入文本格式的随机数,自动处理换行
        try (PrintWriter writer = new PrintWriter(new FileWriter(filename))) {
            Random rand = new Random();
            for (int i = 0; i < n; i++) {
                // 生成0-100之间的随机整数,转成double后写入
                double randomNum = rand.nextInt(101); // 范围:0到100(包含)
                writer.println(randomNum);
            }
        } // try-with-resources语法会自动关闭流,无需手动调用close
    }
}

修复方案2:二进制流读写(保持DataOutputStream的用法)

如果你想继续用二进制流存储数据,必须用对应的DataInputStream读取,保证读写格式匹配:

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

public class BinaryRandomNumberHandler {
    public static void main(String[] args) throws IOException {
        makefile(10, "inputHW02.txt");
        double[] sizearray0 = new double[10];
        int i = 0;
        
        try (DataInputStream dis = new DataInputStream(new FileInputStream("inputHW02.txt"))) {
            while (i < sizearray0.length) {
                // 读取二进制格式的int,转成double存入数组
                int num = dis.readInt();
                sizearray0[i] = num;
                i++;
            }
        }
        
        for (double num : sizearray0) {
            System.out.println(num);
        }
    }

    public static void makefile(int n, String filename) throws IOException {
        try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(filename))) {
            Random rand = new Random();
            for (int i = 0; i < n; i++) {
                // 生成0-100之间的随机整数,以二进制格式写入
                int randomInt = rand.nextInt(101);
                dos.writeInt(randomInt);
            }
        }
    }
}

关键注意点

  • 要生成不同的随机数,必须调用Random类的方法(比如nextInt()、nextDouble()),不能写固定值。
  • 文本流和二进制流不能混用:文本流写的是人类可读的字符串,适合用Scanner、BufferedReader读取;二进制流写的是字节数据,必须用对应的二进制输入流读取,否则会出现解析错误。

内容的提问来源于stack exchange,提问作者Kendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:32:49