当前位置: 首页 > 知识库问答 >
问题:

从. txt文件构建的二维数组的问题

郜彬
2023-03-14

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

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

private double[][] Grid;

public GridMonitor(String filename) throws FileNotFoundException
{
    Scanner FileName = new Scanner(new BufferedReader(new FileReader(filename)));
    int totalRow = 0;
    while (FileName.hasNextLine())
    {
        String[] string = FileName.nextLine().trim().split(" ");
        totalRow++;
        Grid = new double[totalRow][string.length];
        for(int i = 0; i < totalRow; i++)
        {
            for(int j = 0; j < string.length; j++)
            {
                Grid[i][j] = Double.parseDouble(string[j]);
            }
        }
        System.out.println(Arrays.deepToString(Grid));
    }
    System.out.println(Arrays.deepToString(Grid));
    FileName.close();
}

它应该显示类似的结果

[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]

共有3个答案

穆乐逸
2023-03-14

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

int rc = 0;
while ( Filename.hasNextLine()){
// Code before Nested For loop
for(j=0;j<string.length;j++){
Grid[rc][j] = // your code
}
rc++;
}
毕瀚
2023-03-14

你的问题是,你重复分配一个新的数组网格与网格=new双[总计行][string.length];从而覆盖旧的值。

麻宜春
2023-03-14

我想您可能会怀念这样的数组: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;
    }
}
 类似资料:
  • 我正在学习图的结构和算法。从概念上讲,我理解DFS、BFS,并且我可以通过一个图来实现它们,但是传统上图是如何组成的呢? 通常,我将它们看作是以边为指针的节点列表、与它们连接的节点的边列表,或者是一个2D矩阵,其中两个节点的交点arr[node_a][node_b]是边的权重。 当涉及到实际构建它的输入,我不知道从哪里开始。

  • 所以,我试图让我的程序从文本文件中读入一个结构数组,它编译得很好,但看起来并没有真正读入值?...我不知道为什么。这是代码的相关部分: 这是txt文件(标题:Planets.txt) 水星120 50 500 12.1 30 2金星120 50 500 29.1 30 6地球120 50 500 32.2 30 7月亮120 15 50 5.3 30 2火星120 50 500 12.2 30 4

  • 问题内容: 我有一个像这样的数组: 我试图得到这样的数组: 每行(具有固定的任意宽度)都移动一个。A的数组是10k记录长,我试图在Numpy中找到一种有效的方法。目前,我正在使用vstack和for循环,这很慢。有没有更快的方法? 编辑: 问题答案: 实际上,有一种更有效的方法来执行此操作…使用etc的缺点是,您正在复制数组。 顺便说一句,这实际上与@Paul的答案相同,但我将其发布只是为了更详细

  • 我在用Pandas将。txt文件转换为浮动值的数据目录时遇到了麻烦。我需要创建两列数据的散点图,但我一直得到错误“TypeError:Empty'DataFrame':no numeric data to plot”,所以我认为它是以字符串的形式读取数据。 下面是我运行df.info时得到的结果 列u_Vmag和u_B-V中没有任何测量值。 我觉得我只是错过了一些显而易见的东西。有人有什么建议吗?

  • 问题内容: 我试图摆脱n维数组。有没有一种不错的API方法可以做到这一点?我知道两个流的连接方法。 问题答案: 假设您要以行优先的方式顺序处理数组的数组,这应该可以工作: 首先,它调用方法(其中推断为)以获取,然后方法将每个元素映射到using 方法。

  • 我需要一些帮助:我正在做一个在Java的飞行花名册模拟。名册将容纳25名乘客,其中22名来自文本文件(passengerlist.txt)。对于每个乘客,有3个必需的数据点;姓名、座位等级和座位号和2个可选数据点数常旅客号码和常旅客点数。每个乘客都在自己的线路上,每个数据点都用逗号隔开。例如: 我有这个类,到目前为止还有构造函数: 我需要做的是从文本文件中读取每一行并创建数组,即使第一个look行