从数据文件中读取数据点

时间:2017-03-03 20:42:00

标签: java algorithm file-io nearest-neighbor

我有一个包含1000个数据点的数据文件,其组织如下:

1000
16   11
221   25
234   112
348   102
451   456

我试图将文件读入我的程序并找到导致点总距离最短的点的排列。由于我对列表的经验很少,我甚至在阅读数据点时遇到了很多麻烦。有没有更好的方法来解决这个问题?如何通过最近邻居算法运行列表?

public static void main(String[] args) throws IOException {
    File file = new File("output.txt");
    Scanner scanner = new Scanner(file);

    ArrayList<shortestRoute> arrayList = new ArrayList<shortestRoute>();

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

        arrayList.add(new shortestRoute(Integer.parseInt(fields[0]), Integer.parseInt(fields[1])));
    }
    scanner.close();

    System.out.println(arrayList);
}

我知道寻找点到点距离的公式是SquareRoot [(x2-x1)^ 2-(y2-y1)^ 2]。我遇到的麻烦就是将数据点输入到贪心算法中。

2 个答案:

答案 0 :(得分:2)

您正在使用四个空格拆分输入String。查看输入文件,我假设数字也可以用制表符分隔。而是使用四个空格,你应该寻找任何空白区域。拆分功能应该像这样改变:

String[] fields = line.split("\\s+");

答案 1 :(得分:0)

我认为这是因为第一行是文件中的点数。

因为所有数字都坚持使用Scanner。

public static void main(String[] args) throws IOException {
    File file = new File("output.txt");
    Scanner scanner = new Scanner(file);

    ArrayList<shortestRoute> arrayList = new ArrayList<shortestRoute>();

    for(int i =0, n = scanner.nextInt(); i < n; i++) {
        arrayList.add(new shortestRoute(scanner.nextInt(), scanner.nextInt()));
    }
    scanner.close();

    System.out.println(arrayList);
}