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

Новичок в Java, использующий старый учебник и Head First: Java книги, чтобы разобраться.

У меня есть три массива, все параллельные.Мне нужно иметь возможность сортировать по названию, автору или количеству страниц на основе выбора пользователя.Я могу отсортировать один, используя Arrays.sort(), но я зациклен на том, как отсортировать два других массива, чтобы соответствовать новому отсортированному.

Скажем, я сортирую массив BookTitle, но ямне нужно будет отобразить правильного автора и количество страниц соответствующих массивов, и я в тупике.

do
{
    entry = JOptionPane.showInputDialog(null,
                                        "Enter your sort preference: \n" +
                                        "T = Sort by TITLE\n" +
                                        "A = Sort by AUTHOR\n" +
                                        "P = Sort by PAGE Count");

    c = entry.charAt(0);

    switch (c)
    {
    case 't':
    case 'T':
        Arrays.sort(BookTitle);
        for (int x = 0; x < BookTitle.length; x++)
        {
            msg += ("Title: " + BookTitle[x] + "\n");
        }
        JOptionPane.showMessageDialog(null, msg);
        isValid = true;
        break;

    case 'a':
    case 'A':
        isValid = true;
        break;

    case 'p':
    case 'P':
        isValid = true;
        break;

    default:
        JOptionPane.showMessageDialog(null, "Invalid entry");
        break;
    }
} while (isValid == false);

Ответы [ 4 ]

1 голос
/ 27 марта 2012
public class SortUtils {
    public static void sort(long[] x, long[] y) {
        for (int i = 0; i < x.length; i++) {
            for (int j = i; j > 0 && x[j - 1] > x[j]; j--) {
                swap(x, j, j - 1);
                swap(y, j, j - 1);
            }
        }
    }

    private static void swap(long anArray[], int a, int b) {
        long t = anArray[a];
        anArray[a] = anArray[b];
        anArray[b] = t;
    }
}
1 голос
/ 11 ноября 2011

Вы можете создать один класс со всеми тремя атрибутами Author, Title, Pages. И тогда вы можете создать 3 компаратора, которые будут сравнивать с точки зрения автора, заголовка и страниц независимо. И затем вы можете принять пользовательский ввод T, A, P, как то, что вы делаете, вы должны отсортировать массив с соответствующими компараторами. Псевдокод будет выглядеть так:

Case A :
    Arrays.sort(ComparatorA);

case T:
    Arrays.sort(ComparatorT);

case P:
    Arrays.sort(ComparatorP);
1 голос
/ 11 ноября 2011

Адаптировано из этого поста @ScottStanchfield: сортировка списка по одной из его переменных

public class Book {
    String author;
    String title;
    String pages;
}

Collections.sort(list, new Comparator<Book>() {
    public int compare(Book c1, Book c2) {
        if (c1.pages > c2.pages)
            return -1;
        if (c1.pages < c2.pages)
            return 1;
        return 0;
    }
});

Book[] books;
Collections.sort(books);

Я не знаю Java, поэтому, если вы видите какие-либо ошибки,пожалуйста, исправьте их!

0 голосов
/ 11 ноября 2011

Первый вариант такой же, как и выше, объедините их в один класс и сделайте его сопоставимым, как Почему класс Java должен быть сопоставим? .

Это позволяет сравнивать только одно значение, я думаю, что есть способ выбрать, что сортировать, но не то, что я знаю.

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

ОБНОВЛЕНИЕ: Как и выше, у вас может быть несколько разделов, проверьте этот веб-сайт, так как он, кажется, имеет все необходимое.

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