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
相关产品推荐
相关产品推荐

