Java中2个坐标之间的距离

时间:2018-05-03 05:03:21

标签: java eclipse

我还是Java新手,我的任务是执行以下操作:

读入一组坐标,每条线上都有一个坐标。 输入以-1结束。 每个坐标都有一个x和y值。您必须存储这些坐标才能使用 他们以后。 接下来,您必须编写一个方法来计算两个坐标之间的距离,使用 欧氏距离 输出最近的一对点之间的距离(即一对点 欧几里得距离最小的点

Eclipse IDE没有告诉我我的错误是什么

这是我的代码:

import java.util.*;

public class coordinates {

    public static double distance(int w, int x, int y, int z) {
        double xdist = Math.pow(x-w, 2);
        double ydist = Math.pow(z-y, 2);

        double output = Math.sqrt(xdist + ydist);

        return output;
    }



    public static void main(String [] args) {
    Scanner input = new Scanner(System.in);

    ArrayList<String>storage = new ArrayList<String>();

    ArrayList<Integer>storageInt = new ArrayList<Integer>();

    ArrayList<Double>storageDist = new ArrayList<Double>();

    String values = null;

    String inArray;
    String[]holder;
    int convert;

    while(values != "-1") {
        values = input.nextLine();
        storage.add(values);

    }
//convert coordinates to int
    for(int i = 0; i<storage.size();i++) {
        inArray = storage.get(i);
        holder = inArray.split(",");
        convert = Integer.parseInt(holder[i]);
        storageInt.add(convert);

    }
    //store distance
    for (int i=0;i<storageInt.size(); i++) {

        double dist = distance(storageInt.get(i), storageInt.get(i+1),storageInt.get(i+2),storageInt.get(i+3));
        storageDist.add(dist);

    }
    //smallest distance
    Collections.sort(storageDist);

    for (int i=0;i<storageDist.size(); i++) {
        System.out.println(storageDist.get(0));
    }


    }
    }

2 个答案:

答案 0 :(得分:1)

你有一个很好的尝试,但有几个问题。

  1. 使用.equals()检查字符串是否相等。您应该使用values != "-1"
  2. 而不是!values.equals("-1")
  3. 如果用户输入-1,则会在检查storage之前将其添加到-1。您应该按照其他顺序执行此操作:检查-1,并且仅当-1不添加storage时才会这样做。
  4. 分割逗号后,int中有2 holder个。使用索引01访问它们,而不是i
  5. 请注意如何迭代storageInt。请注意,它的元素数是storage的两倍,因为每个坐标都有2 int s。
  6. 您希望任何坐标坐标中最近的坐标(可能坐标对#1和#3最接近),因此您必须使用嵌套的for循环。目前,您正在尝试查找相邻坐标之间的距离(因此您只需检查#1 - #2和#2 - #3之间的距离等)。
  7. 当您迭代storageDist时,您使用了错误的索引。
  8. 检查您的距离计算是否正确。请记住,您应该相互减去x坐标,并相互y坐标。
  9. 请尝试解决这些问题。 (第4点和第5点可能是最难解决的问题 - 如果你在一段时间后仍然陷入困境,你可以发布一个新问题,但至少要先解决其他问题。)

答案 1 :(得分:0)

你应该努力学习,而不是寻找现成的解决方案。答案1很好地指出错误。只是为了鼓励你,这是你自己的代码的无错误版本:

import java.util.*;
public class coordinates {
public static double distance(int w, int x, int y, int z) {
        double xdist = Math.pow(y-w, 2);
        double ydist = Math.pow(z-x, 2);
        double output = Math.sqrt(xdist + ydist);
        return output;
    }
    public static void main(String [] args) {
    Scanner input = new Scanner(System.in);
    ArrayList<String>storage = new ArrayList<String>();
    ArrayList<Integer>storageInt = new ArrayList<Integer>();
    ArrayList<Double>storageDist = new ArrayList<Double>();
    String values = "";
    String inArray;
    String[]holder;
    int convert;
    while(true) {
        values = input.nextLine();
        if(values.equals("-1"))
        {
            break;
        }
        storage.add(values);
    }
//convert coordinates to int
    for(int i = 0; i<storage.size();i++) {
        inArray = storage.get(i);
        holder = inArray.split(",");
        for(int j=0;j<holder.length;j++)
        {
            convert = Integer.parseInt(holder[j]);
            storageInt.add(convert);
        }
    }
    //store distance
    double dist = distance(storageInt.get(0),    storageInt.get(1),storageInt.get(2),storageInt.get(3));
    storageDist.add(dist);
        //smallest distance
    Collections.sort(storageDist);
for (int i=0;i<storageDist.size(); i++) {
        System.out.println(storageDist.get(0));
    }
    }
    }