我还是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));
}
}
}
答案 0 :(得分:1)
你有一个很好的尝试,但有几个问题。
.equals()
检查字符串是否相等。您应该使用values != "-1"
。!values.equals("-1")
-1
,则会在检查storage
之前将其添加到-1
。您应该按照其他顺序执行此操作:检查-1
,并且仅当-1
不添加storage
时才会这样做。int
中有2 holder
个。使用索引0
和1
访问它们,而不是i
。storageInt
。请注意,它的元素数是storage
的两倍,因为每个坐标都有2 int
s。storageDist
时,您使用了错误的索引。请尝试解决这些问题。 (第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));
}
}
}