我在排序的随机数中打印索引时遇到问题,下面是显示已排序元素的代码片段:
Arrays.sort(values);
for (double value : values) {
System.out.println(value);
}
有什么想法吗?
答案 0 :(得分:2)
增强的for循环是获取数组值的快捷方法,但您无法访问元素的索引。请改用传统的for-loop:
for(int index = 0; index < values.length; index++) {
System.out.println(index + ": " + values[index]);
}
答案 1 :(得分:1)
这是一个微不足道的场景。你只需要在排序数组上使用普通for循环。
for (int index=1; index<=values.length;index++) {
System.out.println("index : "+index+" value :"+values[index-1]);
}
答案 2 :(得分:0)
另一种方式(在某些观点上可能更灵活)只是添加外部整数值。
int index = 0;
for (double value : values) {
System.out.println(++index + ". " + value);
}
答案 3 :(得分:0)
在您的代码中,您将打印数组中的值,而不是索引。因此,如果你想通过使用for-each循环来打印带有值的数组索引,那么就是代码。
Arrays.sort(values);
int i=0;
for (double value : values) {
System.out.println("index is "+i+" , value is :"+value);
i++;
}
答案 4 :(得分:0)
试试这个
Arrays.sort(values);
int i=0;
for (double value : values) {
System.out.println("Index :"+i++ +" Value: "+value);
}
答案 5 :(得分:0)
如果要跟踪数组中每个已排序条目的原始索引,则应收集索引数组并对该索引处的值进行排序。
public void test() {
int[] values = {9,8,7,6,5,4,3,2,1};
// Grab the indexes of each.
Integer[] indexes = new Integer[values.length];
for (int i = 0; i < indexes.length; i++) {
indexes[i] = i;
}
// Sort them through the indexes.
Arrays.sort(indexes, new Comparator<Integer> () {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(values[o1], values[o2]);
}
});
System.out.println(Arrays.toString(indexes));
// Or in a single expressive Java-8 line:
System.out.println(
// Count the elements.
IntStream.range(0, values.length)
// Turn int to Integer
.boxed()
// Sort it on the values behind the indexes.
.sorted((i, j) -> Integer.compare(values[i], values[j]))
// Make a list.
.collect(Collectors.toList())
);
}
打印
[8,7,6,5,4,3,2,1,0]
完全符合预期。