Java数组反向排序!需要反转

时间:2010-11-30 00:44:41

标签: java arrays sorting reverse

现在我有我的数组排序(这比得到错误更好),除了它反向排序,而不是我想要它排序。

   public static void sortDatabase(int numRecords, String[] sDeptArr, 
              int[] iCourseNumArr, int[] iEnrollmentArr)
   {
       System.out.println("\nSort the database. \n");
       String sTemp = null;
       int iTemp = 0;
       int eTemp = 0;
       String a, b = null;
       for(int i=0; i<numRecords; i++)
       {
           int iPosMin = i+1;
           for(int j=iPosMin; j<numRecords; j++)
           {
               a = sDeptArr[i];
               b = sDeptArr[iPosMin];
               if(a.compareTo(b) > 0)
               {
                   sTemp= sDeptArr[j];
                   sDeptArr[j] = sDeptArr[iPosMin];
                   sDeptArr[iPosMin] = sTemp;
                   iTemp = iCourseNumArr[j];
                   iCourseNumArr[j] = iCourseNumArr[iPosMin];
                   iCourseNumArr[iPosMin] = iTemp;
                   eTemp = iEnrollmentArr[j];
                   iEnrollmentArr[j] = iEnrollmentArr[iPosMin];
                   iEnrollmentArr[iPosMin] = eTemp;
               }
               else if(sDeptArr[j].equals(sDeptArr[iPosMin]) && !(iCourseNumArr[j] < iCourseNumArr[iPosMin]))
               {
                   sTemp= sDeptArr[i];
                   sDeptArr[i] = sDeptArr[iPosMin];
                   sDeptArr[iPosMin] = sTemp;
                   iTemp = iCourseNumArr[i];
                   iCourseNumArr[i] = iCourseNumArr[iPosMin];
                   iCourseNumArr[iPosMin] = iTemp;
                   eTemp = iEnrollmentArr[i];
                   iEnrollmentArr[i] = iEnrollmentArr[iPosMin];
                   iEnrollmentArr[iPosMin] = eTemp;
               }
               else continue;
           }

       }
   }

同样,没有数组列表或array.sorts。我只需要反转这是如何排序,但我不知道如何。

3 个答案:

答案 0 :(得分:3)

只需a.compareTo(b) < 0代替> 0

编辑:我已经找到了问题所在。但由于这是作业(感谢老实说​​),我不会发布我的解决方案,但这里有一些提示:

  • 您正在进行选择排序。算法并不像你做的那么复杂。如果要检查的两个元素的顺序错误,则只需要交换。我看到你有3个分支,没有必要。

  • 了解分配ab的时间。通过内部循环,j正在发生变化,ab永远不会改变,因为iiPosMin保持不变。我希望有所帮助。

  • 将算法分解为您知道通过提取方法工作的谨慎部分总是好的。您重复相同的交换代码两次,但索引的参数不同。拿出来然后做一个:

-

// swaps the object at position i with position j in all arrays
private static void swap(String[] sDeptArr, int[] iCourseNumArr, int[] iEnrollmentArr, int i, int j)

然后你会看到你的代码变得更清晰。

答案 1 :(得分:2)

首先我要说你需要构建一个数据结构来封装程序中的信息。所以我们称之为课程。

public class Course {
   public String department;
   public Integer courseNumber;
   public Integer enrollment;
}

为什么不使用Java的内置排序功能?

List<Course> someArray = new ArrayList<Course>();
...
Collections.sort( someArray, new Comparator<Course>() {
    public int compare( Course c1, Course c2 ) {
       int r = c1.compareTo( c2 );
       if( r == 0 ) { /* the strings are the same sort by something else */
          /* using Integer instead of int allows us 
           * to compare the two numbers as objects since Integer implement Comparable
           */
          r = c1.courseNumber.compareTo( c2.courseNumber );
       }
       return r;
    }
});

希望能在你的作业中获得A。哦,然后放弃静静的Jr.也许有一天,你的教授可以解释为什么静力学很差。

答案 2 :(得分:1)

嗯......我想知道你怎么会改变读if(a.compareTo(b) > 0)的行?