2014-01-24 202 views
1

我看过比较器和算法,但我无法理解它们。 java.util.Collections中的比较器事物。 所以我选择使用此:按降序排列数组?

//return an array in descending order, using set algorithm 
    public int[] descendSort() 
    { 
     int[] tempArray = new int[temps.length]; 

     for (int i = temps.length-1; i <= 0; --i) 
     { 
      tempArray[i] = temps[i]; 
     } 

    return tempArray; 
    }   

我在我的客户端创建数组是这样的:

int[] temps1 = new int[]{45, 76, 12, 102, 107, 65, 43, 67, 81, 14}; 

我的输出最终是这样的:

The temperatures in descending order is: 0 0 0 0 0 0 0 0 0 0 

WHY ????

+0

在这里你可以看到如何使用比较器接口: http://stackoverflow.com/questio ns/7414299/sorting-int-array-in-descending-order – denisazevedo

+0

@HovercraftFullOfEels我做了一个方法,它在手之前对数组排序,所以这不是问题。 – PatGreens

回答

8

条件i <= 0永远不会被满足。

另外,tempArray[i] = temps[i];将仅复制阵列,如

要么是:

for (int i = temps.length-1; i >= 0; --i) 
    { 
     tempArray[temps.length-1-i] = temps[i]; 
    } 

或者干脆

for (int i = 0; i < temps.length; ++i) 
    { 
     tempArray[temps.length-1-i] = temps[i]; 
    } 
+0

我有一个数组越界异常 – PatGreens

+0

我仍然出界 – PatGreens

+2

tempArray [temps.length-i]到tempArray [temps.length-1-i] – mdewitt

0

你如何排序任何东西,你只是复制从一个阵列到另一个。这是使用选择排序的排序代码。 public int [] descsort(){ for(int i = 0,imax)//如果有更大的元素,跟踪它 int index = j;

 int temp=temps[max]; 
     temps[max]=temps[index]; 

     temps[index]=temp; 

    } 
     return temps; 
    } 
1

一衬垫(不会对基元工作):

Integer[] temps1 = new Integer[] { 45, 76, 12, 102, 107, 65, 43, 67, 81, 14 }; 

Arrays.sort(temps1, Collections.reverseOrder()); 
0

排序整数数组以降序可以以这种方式来完成:

比较器比较新的=比较器() {

 @Override 
     public int compare(Integer o1, Integer o2) { 
      return o2.compareTo(o1); 
     } 
    }; 
    Integer[] array = new Integer[] { 9,1, 0, 7, 0, 0, 0, 5, 0 }; 
    Arrays.sort(array, comparator); 
    System.out.println(Arrays.toString(array));