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

Java基础问题:如何用文件数据创建指定大小的多维数组?

如何将文件读取的一维数组转换为2500×100的二维数组

核心解决方案:索引映射

一维数组的元素可以通过行列索引计算直接对应到二维数组的位置,核心逻辑是:二维数组中array[i][j]对应的一维数组索引为i * 列数 + j(因为每一行包含列数个元素,前i行共占用i*列数个位置,加上当前列索引j就是准确的一维数组下标)。


方案1:先读一维数组再转二维数组

先修正你读取文件到一维数组的代码(补充循环闭合、资源释放和边界检查),再完成转换:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ArrayConverter {
    public static void main(String[] args) {
        // 读取文件到一维数组
        int[] oneDArray = new int[250000];
        int currentIndex = 0;
        // 用try-with-resources自动关闭Scanner,避免资源泄漏
        try (Scanner scanner = new Scanner(new File("C:/Schoolwork/unit7.txt"))) {
            // 加边界检查,防止文件数据过多导致数组越界
            while (scanner.hasNextInt() && currentIndex < oneDArray.length) {
                oneDArray[currentIndex++] = scanner.nextInt();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // 转换为2500行×100列的二维数组
        int rows = 2500;
        int columns = 100;
        int[][] twoDArray = new int[rows][columns];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                // 计算一维数组对应的索引位置
                twoDArray[i][j] = oneDArray[i * columns + j];
            }
        }

        // 可选:验证输出(比如打印前2行)
        System.out.println("二维数组前2行内容:");
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 10; j++) { // 只打印前10个元素避免输出过长
                System.out.print(twoDArray[i][j] + " ");
            }
            System.out.println("...");
        }
    }
}

方案2:直接读取文件填充二维数组(更省内存)

如果文件数据量较大,不需要先存储一维数组,可以直接按行列顺序读取填充,减少内存占用:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class DirectTo2DArray {
    public static void main(String[] args) {
        int rows = 2500;
        int columns = 100;
        int[][] twoDArray = new int[rows][columns];

        try (Scanner scanner = new Scanner(new File("C:/Schoolwork/unit7.txt"))) {
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < columns; j++) {
                    if (scanner.hasNextInt()) {
                        twoDArray[i][j] = scanner.nextInt();
                    } else {
                        // 文件数据不足时填充默认值(比如0)
                        twoDArray[i][j] = 0;
                    }
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // 验证输出
        System.out.println("二维数组第1行前5个元素:");
        for (int j = 0; j < 5; j++) {
            System.out.print(twoDArray[0][j] + " ");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:42:29