2011-11-11 4 views
1

Начинающий на Java, используя старый учебник и Руководитель: 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); 
+3

Требуется ли они быть параллельны? Потому что лучший способ сделать это - иметь 1 массив объектов, где каждый объект содержит Title, Author и Count. – VoidStar

+1

Поместите их все в один класс. Сортировка массива объектов этого класса. Или что-то типа того; Я не знаю Java. См. Http://stackoverflow.com/questions/4018090/sorting-listclass-by-one-of-its-variable –

ответ

1

адаптировано из этого поста по @ScottStanchfield: sorting List<Class> by one of its variable

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

Первый вариант, как указано выше, выталкивает их в один класс и делает его сопоставимым, как Why should a Java class implement comparable?.

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

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

ОБНОВЛЕНИЕ: Как указано выше, вы можете иметь несколько компаньонов, проверьте сайт this, поскольку у него есть все, что вам нужно.

+0

Ссылка O'Reilly мертва. –

1

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

Case A : 
    Arrays.sort(ComparatorA); 

case T: 
    Arrays.sort(ComparatorT); 

case P: 
    Arrays.sort(ComparatorP); 
1
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; 
    } 
} 
+0

Как правило, это плохая идея реализовать сортировку пузырьков, но это особенно актуально при работе на языке, который имеет встроенные алгоритмы сортировки (например, 'Arrays.sort') ... –

Смежные вопросы