Проблемы с сортировкой параллельных массивов - PullRequest
1 голос
/ 20 ноября 2011

У меня есть класс, в котором я должен сделать программу, которая читает набор данных, помещает его в несколько различных массивов.Затем мне нужно их отсортировать, но мой метод, похоже, не работает.

внутри моего первого цикла for. У меня есть два оператора if для двух ситуаций, которые мне нужно будет рассмотреть.Первая ситуация будет, если имя команды будет указано раньше, а вторая - когда имя команды совпадает.Если название команды совпадает, она сортируется по ярдам.

Сортировка имен работает нормально, но когда я отменяю комментарий ко второму утверждению, он сортирует его по порядку, я не могу понять.

public static void sortDatabase(int numRecords, String[] teamArr,
        int[] attemptsArr, int[] yardsArr, int[] winsArr,
        int[] loseArr)
{

    //Sort the database first according to name and then according to yards
    System.out.println("Sort the database.\n");

    int iMin;

    String teamTemp;
    int attemptTemp;
    int yardTemp;
    int winsTemp;
    int loseTemp;

    for(int i = 0; i < numRecords - 1; i++)
    {
        iMin = i;

        for(int k = i + 1; k < numRecords; k++)
        {
            int compare = teamArr[k].compareTo(teamArr[iMin]);
            if(compare < 0)
            {
                iMin = k;
            }
            else if(compare == 0 && yardsArr[k] < yardsArr[iMin])
            {                
                iMin = k;
            }

            //swap out all data
            teamTemp = teamArr[i];
            attemptTemp = attemptsArr[i];
            yardTemp = yardsArr[i];
            winsTemp = winsArr[i];
            loseTemp = loseArr[i];

            teamArr[i] = teamArr[iMin];
            attemptsArr[i] = attemptsArr[iMin];
            yardsArr[i] = yardsArr[iMin];
            winsArr[i] = winsArr[iMin];
            loseArr[i] = loseArr[iMin];

            teamArr[iMin] = teamTemp;
            attemptsArr[iMin] = attemptTemp;
            yardsArr[iMin] = yardTemp;
            winsArr[iMin] = winsTemp;
            loseArr[iMin] = loseTemp;
        }
    }
}

Также не комментируйте и не отвечайте лучшеспособы сделать это или сказать, что я должен создать новый класс для обработки всех данных.Просто попробуйте ответить методом сортировки, который я использую.Я делаю это для класса и у меня мало вариантов.

1 Ответ

1 голос
/ 20 ноября 2011

Бит, помеченный //swap out all data, должен прийти после цикла for, который устанавливает iMin, а не внутри it. Прямо сейчас вы делаете перестановки в середине установки iMin, и это приведет к тому, что iMin станет неправильным и неправильные элементы будут заменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...