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

如何将输入文件值传递至其他方法?Java矩阵数据丢失求助

问题分析与修复方案

首先,咱们来拆解你遇到的问题:

核心问题1:y变量未在每行开始时重置为0

你在读取每行数据的时候,y只会不断自增,但没有在处理新一行前重置为0。举个例子:如果第一行有3个元素,y会变成3;处理第二行时,你会从matrix[x][3]开始赋值,而matrix[x][0]、matrix[x][1]、matrix[x][2]这些位置依然是默认的0。这就导致你的矩阵数据完全错位,大部分位置都是0。

核心问题2:固定大小的静态数组与实际数据不匹配

你初始化了一个10000x10000的超大静态数组,但实际读取的测试数据行数和列数肯定远小于这个值。当你在isDeadlock方法里遍历整个数组时,那些未被赋值的行和列自然都是默认的0,看起来就像数据没被保留一样。


修复步骤与代码示例

第一步:快速修复y的重置问题

如果想继续使用原有的静态数组,只需要在每次读取新行时把y重置为0,确保每行数据从第0列开始填充:

while ((line = in.readLine()) != null) {
    y = 0; // 关键:每行开始时重置y为0
    String[] values = line.split(",");
    for (String str : values) {
        int str_int = Integer.parseInt(str);
        matrix[x][y] = str_int;
        System.out.print(matrix[x][y] + " ");
        y = y + 1;
    }
    System.out.println("");
    x = x + 1;
}

第二步:改用动态集合存储数据(更优方案)

固定大小的数组很容易造成空间浪费和数据错位,建议先用List<List<Integer>>动态存储读取到的矩阵数据,最后再转成合适大小的二维数组。这样isDeadlock方法里遍历的就是真实有效的数据,不会出现大量无效的0:

修改后的完整代码示例:

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

public class Findcycle {
    // 不再使用固定大小的静态数组,改用动态集合存储
    public static void main(String[] args) {
        List<List<Integer>> matrixList = new ArrayList<>();
        try {
            BufferedReader in = new BufferedReader(new FileReader("TestCase1.txt"));
            String line;
            while ((line = in.readLine()) != null) {
                List<Integer> row = new ArrayList<>();
                String[] values = line.split(",");
                for (String str : values) {
                    int str_int = Integer.parseInt(str);
                    row.add(str_int);
                    System.out.print(str_int + " ");
                }
                matrixList.add(row);
                System.out.println("");
            }
            in.close();
            // 将动态集合转为二维int数组
            int[][] matrix = new int[matrixList.size()][];
            for (int i = 0; i < matrixList.size(); i++) {
                List<Integer> row = matrixList.get(i);
                matrix[i] = row.stream().mapToInt(Integer::intValue).toArray();
            }
            System.out.println(isDeadlock(matrix));
        } catch (IOException ioException) {
            // 不要空catch块,打印异常方便调试问题
            ioException.printStackTrace();
        }
    }

    public static class Node {
        int id;
        List<Node> getNodes = new ArrayList<Node>();

        public Node(int id) {
            this.id = id;
        }
    }

    public static String isDeadlock(int matrix[][]) {
        List<Node> nodes = new ArrayList<Node>();
        // 现在遍历的是真实有效的数据,不会有多余的0
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.println(matrix[i][j]);
            }
        }
        // 这里补充你原来的死锁判断逻辑...
        return "处理结果";
    }
}

额外建议:不要忽略异常

你的代码里catch( IOException ioException ) {}是空的,这样如果读取文件时出现错误(比如文件找不到、格式错误),你完全不知道问题出在哪。一定要在catch块里打印异常信息,方便快速定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:18