您好我试图显示数组的索引而不是元素这是我的代码到目前为止的一部分:
int randomInt2 = randomGenerator.nextInt(15)+1;
double [] distances = new double [randomInt2];
Arrays.sort(distances);// sorts array from highest to lowest
for (double val : distances) {
System.out.println("["+val+"],");
}
System.out.println("The Nearest to point 1 is point: ");
每个索引保持1-1000之间的值,但我不想显示我想显示索引的值,以便我可以显示哪些索引最接近点1(即0) 对不起,如果我不清楚,如果你需要我解释更多,那么我很高兴
答案 0 :(得分:3)
感谢dasblinkenlight的评论,我终于理解了你需要的东西。
执行您需要做的事情的最简单方法是创建一个像
这样的对象class Value implements Comparable<Value> {
int index;
dobule value;
public int compareTo(Value val) {
return Double.compare(this.value, val.value);
}
}
并使用它来存储值。请注意Comparable
实施 - 允许您使用Collections.sort()
和Arrays.sort()
。
你也可以不使用排序。对数组进行排序比查找最小值要复杂得多。只需遍历数组一次,找到最小的值并返回其索引。
double minVal = Double.MAX_VALUE;
int minIndex = -1;
for (int i=0, max=distances.length; i<max;i++) {
if (values[i] < minVal) {
minVal = values[i];
minIndex = i;
}
}
System.out.println("The Nearest to point 1 is point: "+minIndex+" with value "+minVal);
对于索引:如果要访问给定元素的索引,则不能使用标准foreach
循环。其中一个原因是您可能会迭代的某些集合不支持元素排序(如Set
)。
您必须使用标准for
循环或自行跟踪索引。
for (int i=0, max=distances.length; i<max;i++) {
System.out.println("["+i+"] "+distances[i]);
}
或
int i = 0;
for (double val : distances) {
System.out.println("["+i+"] "+val);
i++;
}
答案 1 :(得分:1)
试试这个
for (int i=0;i< distances.length;i++) {
System.out.println("distances["+i+"]");
}
答案 2 :(得分:1)
我假设你想找出原始数组中距离最小的项目的索引。对数组进行排序时,此信息会丢失,因为它只会从0..length-1
编制索引。因此,您的答案将始终为0
。
你可以做两件事:
1)找到最小值:
double[] distances = new double [randomInt2];
// Need copy to for sorting
double[] c = Arrays.copyOf(distances, distances.length);
// Find minimum value
Arrays.sort(c);
double min = c[0];
// Search that value in the original array:
for (int i = 0; i < distances.length; ++i) {
if (distances[i] == min) {
System.out.println("Minimum distance at: " + i);
break;
}
}
2)使用距离信息存储索引信息:
为此你需要:
public class Distance
。Comperator<Distance>
,以便按距离比较实例Distance[] convertToDistance(double[] array)
的函数,从纯双值(如果需要)创建距离数组Arrays.sort(T[], Comparator<? extends T>)
方法sortedDistances[0].index
答案 3 :(得分:0)
您可以使用旧式for
循环而不是增强型for
循环:
Arrays.sort(distances);// sorts array from highest to lowest
for (int i = 0; i < distances.lengh; ++i) {
System.out.println("index: " + i + ":[" + val + "],");
}
答案 4 :(得分:0)
你可能每个距离都是
的对象class Distance {
public Distance(double dist) {
this.dist = dist;
this.id = idcount++;
}
static int idcount = 0;
public int id;
public double dist;
}
并且在每个
中调用id