Java 从数据文件中读取数据点

Java 从数据文件中读取数据点,java,algorithm,file-io,nearest-neighbor,Java,Algorithm,File Io,Nearest Neighbor,我有一个包含1000个数据点的数据文件,其组织方式如下: 1000 16 11 221 25 234 112 348 102 451 456 String[] fields = line.split("\\s+"); 我正试图将文件读入我的程序中,并找到一个点对点总距离最短的点的排列。因为我对列表没有什么经验,所以我甚至在读取数据点时都有很多困难。有没有更好的办法?如何通过最近邻算法运行列表 public static void main(String[] args) t

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

1000
16   11
221   25
234   112
348   102
451   456
String[] fields = line.split("\\s+");
我正试图将文件读入我的程序中,并找到一个点对点总距离最短的点的排列。因为我对列表没有什么经验,所以我甚至在读取数据点时都有很多困难。有没有更好的办法?如何通过最近邻算法运行列表

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);
}
publicstaticvoidmain(字符串[]args)引发IOException{
File File=新文件(“output.txt”);
扫描仪=新扫描仪(文件);
ArrayList ArrayList=新的ArrayList();
while(scanner.hasNextLine()){
字符串行=scanner.nextLine();
字符串[]字段=行。拆分(“”);
add(新的短路由(Integer.parseInt(字段[0]),Integer.parseInt(字段[1]));
}
scanner.close();
System.out.println(arrayList);
}

我知道计算点对点距离的公式是平方根[(x2-x1)^2-(y2-y1)^2]。我遇到的问题是将数据点输入贪婪算法。

您正在使用四个空格拆分输入字符串。查看输入文件,我假设数字也可以用一个选项卡分隔。而不是使用四个空格,你应该寻找任何空白。拆分函数应按如下方式更改:

1000
16   11
221   25
234   112
348   102
451   456
String[] fields = line.split("\\s+");

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

因为都是数字,所以请坚持使用扫描仪

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);
}
publicstaticvoidmain(字符串[]args)引发IOException{
File File=新文件(“output.txt”);
扫描仪=新扫描仪(文件);
ArrayList ArrayList=新的ArrayList();
对于(int i=0,n=scanner.nextInt();i
使用起来更安全。拆分(\\s+”)将跳过任意数量的空格字符。到目前为止,您尝试过哪些排序?我认为读入数据的方式没有太大问题。您可能需要在arrayList.add函数中进行空检查。如何计算点到点距离?只是
mod(a-b)
?使用BufferedReader可能比使用Scanner性能更好,读取数据也比使用Scanner更简单。尝试Scanner.nextInt()您的想法是对的,但鉴于
nextLine
确保使用线端,扫描仪未正确前进时,您不会遇到奇怪的
nextFoo
错误。感谢您的输入。编辑了我的回答