-3

这是我正在研究的 Dijkstra 算法的网站,但是边缘的数据是在程序内部创建的。我想要的是将数据作为文本文件,我已经制作了一个文本文件,并且还能够将其作为字符串逐行读取。

但我不知道如何从程序中的文本文件中使用这些数据。任何人都可以给我任何建议吗?

我的数据看起来像这样,正在创建一个图表

起点、终点、成本

2 3 1

2 4 1

2 5 2

2 6 2

3 1 1

3 2 1

3 4 1


这是我现在读取文件的代码,我可以打印出所有行或特定行,它读取数组列表中的数据。但我想做行拆分 (String[] fields = line.split(" ");) 这样我就可以在数据中打印出一个数字。但是当我把它放在代码中时不允许我这样做,任何人都可以为我添加它。

文件 file = new File("data1.txt");

    List<String> lines = new ArrayList<String>();

    try{
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            lines.add(scanner.nextLine());

        }
        scanner.close();

    } catch (FileNotFoundException e) {
        System.out.println("File not found.");  
    }

    for (int i = 0 ; i <lines.size(); i++){

        String getlines = lines.get(i);

    }

        System.out.print(lines.get(0)+"\n");

}
4

2 回答 2

1

您可以使用以下代码读取文件:

    File file = new File("YOUR_FILE_PATH"); 
    try {
        Scanner scanner = new Scanner(file); 

        scanner.nextLine(); // to ignore the first line which has the header

        ArrayList<GraphNode> graphList = new ArrayList<GraphNode>();

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            String[] fields = line.split(" ");

            // Do something with these values
            graphList.add(new GraphNode(Integer.parseInt(fields[0]),
                                        Integer.parseInt(fields[1]),
                                        Integer.parseInt(fields[2]));

        }
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

当您创建文件以制作分隔符时,您应该保持一致,,或者space因为在您的示例中,标题由 分隔,,而数据由space

您可以有一个简单的类来保存您的数据,例如:

class GraphNode {
    private int start;
    private int end;
    private int cost;

    public GraphNode(int start, int end, int cost) {                
            this.start = start;
            this.end = end;
            this.cost = cost;
    }

    public int getStart() {
            return start;
    }

    public void setStart(int start) {
            this.start = start;
    }

    public int getEnd() {
            return end;
    }

    public void setEnd(int end) {
            this.end = end;
    }

    public int getCost() {
            return cost;
    }

    public void setCost(int cost) {
        this.cost = cost;
    }

}
于 2013-02-17T22:01:32.553 回答
0

您将文本文件中的数据放入(在您的情况下)一种字符串数组/列表/任何适合您使用循环的目的。然后,您可以通过它们的索引 fx 来获取它们。和他们一起做数学。

如果您想在之后将它们从字符串类型转换为数字类型,您可以使用 parseInteger 方法(fx 并且如果您只处理整数)将它们转换为正确的数据类型。显然,float 类也有一个 parseFloat 方法,依此类推。

在您读取文件并将数据插入某种字符串数组之后。我建议您使用循环将它们放在适当数据类型的新数组中,并使用解析方法来转换它们。

之后,您可以从新数组中获取值并根据需要对它们进行数学运算。

于 2013-02-17T19:01:36.707 回答