Java сортировка массивов в обратном порядке!Нужно поменять обратное - PullRequest
0 голосов
/ 30 ноября 2010

Прямо сейчас у меня есть сортировка массива (что лучше, чем получение ошибки), за исключением того, что она сортируется в обратном порядке, чем то, что я хочу отсортировать.

   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 ]

3 голосов
/ 30 ноября 2010

просто сделайте a.compareTo(b) < 0 вместо > 0

РЕДАКТИРОВАТЬ : Я понял проблему. Но так как это домашняя работа (спасибо за честность), я не буду публиковать свое решение, но вот несколько советов:

  • Вы делаете выбор сортировки. Алгоритм не так сложен, как вы его сделали. Вам нужно поменять местами только если два элемента, которые вы проверяете, находятся в неправильном порядке. Я вижу, у вас там 3 ветви, нет необходимости.

  • Посмотрите, когда вы назначаете a и b. Через внутренний цикл, где меняется j, a и b никогда не изменяются, потому что i и iPosMin остаются неизменными. Я надеюсь, что это помогает.

  • Всегда полезно разбить ваш алгоритм на отдельные части, которые, как вы знаете, работают, путем извлечения методов. Вы повторяете один и тот же код обмена дважды, но с разными аргументами для индексов. Возьми это и просто сделай:

-

// 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 голосов
/ 30 ноября 2010

Сначала я бы сказал, что вам нужно построить структуру данных для инкапсуляции информации в вашей программе.Давайте назовем его «Курс».

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;
    }
});

Надеюсь, что вы получите оценку "А" на домашней работе.О, и откажитесь от статического младшего. Может быть, однажды ваш профессор сможет узнать, почему статика плохая.

1 голос
/ 30 ноября 2010

Хм ... Интересно, что будет, если вы измените строку с надписью if(a.compareTo(b) > 0)?

...