Java 基于.txt文件构建的二维数组存在问题

Java 基于.txt文件构建的二维数组存在问题,java,Java,我已经能够使用.txt文件创建一个数组。但是,现在打印数组时,它会重复打印最后一行,而不是以前的行。我相信我分配了正确的值,并确保将它们分配给数组 我试着循环并给每一个索引分配正确的值,然后沿着每一行往下走,直到它们都被分配。然而,这将导致最终覆盖所有内容 private double[][]网格; 公共GridMonitor(字符串文件名)引发FileNotFoundException { 扫描仪文件名=新扫描仪(新BufferedReader(新文件读取器(文件名)); int TOTALL

我已经能够使用.txt文件创建一个数组。但是,现在打印数组时,它会重复打印最后一行,而不是以前的行。我相信我分配了正确的值,并确保将它们分配给数组

我试着循环并给每一个索引分配正确的值,然后沿着每一行往下走,直到它们都被分配。然而,这将导致最终覆盖所有内容

private double[][]网格;
公共GridMonitor(字符串文件名)引发FileNotFoundException
{
扫描仪文件名=新扫描仪(新BufferedReader(新文件读取器(文件名));
int TOTALLOW=0;
while(FileName.hasNextLine())
{
String[]String=FileName.nextLine().trim().split(“”);
totalRow++;
Grid=新的双精度[totalRow][string.length];
对于(int i=0;i
它应该显示类似的结果

[3.0][3.0]、[2.0][10.0][7.0]、[5.0][6.0][9.0]、[4.0][5.0][8.0]

但事实上,这只是一场表演

[4.0][5.0][8.0]、[4.0][5.0][8.0]、[4.0][5.0][8.0]、[4.0][5.0][8.0]


我想您可能错过了这样一个数组:double[][]grid=new double[row][col]
,因此当您逐行读取文件时,在获得最后一行之前,您无法找到行数

public static double[][] readGridFromFile(Path file) throws FileNotFoundException {
    final Pattern space = Pattern.compile("\\s+");

    try (Scanner scan = new Scanner(new BufferedReader(new FileReader(file.toFile())))) {
        List<double[]> lines = new ArrayList<>();

        while (scan.hasNextLine()) {
            lines.add(Arrays.stream(space.split(scan.nextLine().trim()))
                            .mapToDouble(Double::parseDouble)
                            .toArray());
        }

        double[][] grid = new double[lines.size()][];
        int row = 0;

        for (double[] line : lines)
            grid[row++] = line;

        return grid;
    }
}
publicstaticdouble[]readGridFromFile(路径文件)抛出FileNotFoundException{
最终模式空间=模式。编译(\\s+);
try(Scanner scan=new Scanner(new BufferedReader(new FileReader)(file.toFile())){
列表行=新的ArrayList();
while(scan.hasNextLine()){
lines.add(Arrays.stream(space.split(scan.nextLine().trim()))
.mapToDouble(Double::parseDouble)
.toArray());
}
double[]]网格=新的double[lines.size()][];
int行=0;
for(双[]行:行)
网格[行++]=行;
返回网格;
}
}

您的问题是,您反复使用
Grid=new double[totalRow][string.length]向网格分配一个新数组从而覆盖旧值。

嵌套for循环中存在问题,网格每次都由同一行填充。移除外部循环,将行计数器初始化为0,并在外部循环内递增

int rc = 0;
while ( Filename.hasNextLine()){
// Code before Nested For loop
for(j=0;j<string.length;j++){
Grid[rc][j] = // your code
}
rc++;
}
int rc=0;
while(Filename.hasNextLine()){
//嵌套For循环之前的代码

对于(j=0;jI会小心地将字符串数组命名为“
string
”。我会选择“
strings
”或“
stringArray
”。甚至在这种情况下,也可能是类似于“
rowContents
”或“
row
”之类的东西.@arcadeblast77很好,这是有道理的。不过,你对手头的问题有什么想法,因为这次更改并没有解决这个问题。虽然有时会提高可读性(让代码读起来像正统的英语),但从一眼上看不太清楚可以使这样的错误更容易发现。谢谢,我现在看到了问题。我确实初始化了网格。问题是,我每次都重新设计它,所以它重写了以前的迭代。