【问题标题】:Java array sorting in reverse! Need to reverse the reverseJava数组反向排序!需要反转反向
【发布时间】:2010-11-30 00:44:41
【问题描述】:

现在我有我的数组排序(这比出现错误要好),只是它的排序与我想要的排序相反。

   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。我只需要扭转这是如何排序的,但我不知道如何。

【问题讨论】:

    标签: java arrays sorting reverse


    【解决方案1】:

    只需使用a.compareTo(b) &lt; 0 而不是&gt; 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)
    

    然后你会发现你的代码变得更干净了。

    【讨论】:

    • 在那种情况下,我只能说你的算法根本没有排序。如果它排序正确并且总是颠倒过来,我的解决方案就会奏效。我刚刚逐字运行你的程序,它没有排序。
    【解决方案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。也许有一天你的教授可以解释一下为什么静态是不好的形式。

    【讨论】:

    • 不要走开!我这里不需要那些东西。我必须按照我的方式去做,没有数组列表或其他东西。 JK,但说真的我不能用它。
    • 好吧,我会给你一个提示。在到达内部循环的末尾之前,不要随意打乱你的数组。因此,只需根据您的比较跟踪最小的整数。然后在内循环找到该通道中最小的东西之后。将其与 i 处的对象交换。如果您只使用 Course 对象而不是并行数组,这一切都会容易得多。您正在比较 a 和 b,但 a 来自索引 i。然后在你的洗牌中你使用 j.看起来不对。
    • @Chad 但是您仍然可以使用对象,对吧?您仍然可以使用您的算法进行排序,但现在您不需要处理三个数组,只有一个。清理你的代码很多。很多时候,简单的重构(保留行为的代码更改)就会暴露出愚蠢的错误
    • @Chad,如果你想让别人帮你做作业,你需要多一点体贴。人们试图免费帮助你,做你可能需要自己做的工作,你不应该忘记这一点。
    【解决方案3】:

    嗯...我想知道你改变了if(a.compareTo(b) &gt; 0)这行会发生什么?

    【讨论】:

    • 你把它改成什么了?你还有什么可以改变它的吗?排序不正确的项目会给您任何提示吗?您能否更改代码中的其他任何内容以进行反向排序?
    • 我把它改成了
    猜你喜欢
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2019-05-14
    • 2014-03-23
    • 2014-04-19
    • 2013-03-20
    相关资源
    最近更新 更多