2011-11-11 5 views
1

Java의 초보자는 오래된 교과서를 사용하고 헤드 퍼스트 : Java 책을 사용하여 몇 가지 문제를 해결합니다.병렬 배열 정렬

세 개의 배열이 모두 평행합니다. 사용자 선택에 따라 제목, 작성자 또는 페이지 수로 정렬 할 수 있어야합니다. Arrays.sort()을 사용하여 하나를 정렬 할 수 있지만 다른 두 배열을 정렬하는 방법에 대해 신경 쓰고 있습니다.

내가 BookTitle 배열을 정렬한다고 말하면서 적절한 저자와 해당 배열의 페이지 수를 표시해야 할 필요가 있습니다. @ScottStanchfield에 의해이 게시물에서 적응

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 개 갖는 것입니다. – VoidStar

+1

모두 한 클래스에 넣으십시오. 해당 클래스의 객체 배열을 정렬합니다. 또는 그런 것; 나는 자바를 모른다. http://stackoverflow.com/questions/4018090/sorting-listclass-by-one-of-its-variable –

답변

1

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

난 당신이 어떤 실수를 볼 경우,이를 수정하시기 바랍니다, 그래서 자바를 몰라!

0

첫 번째 옵션은 위와 동일하므로 하나의 클래스로 척하고 Why should a Java class implement comparable?과 비슷하게 만듭니다.

이것은 하나의 값을 비교할 수있게 해줄뿐입니다. 정렬 할 항목을 선택할 수있는 방법이 있지만 실제로는 알 수 없습니다.

다른 방법은 ... 자신의 정렬 방법을 구현하는 것입니다. 그것은 약간의 일이 될 수 있지만, 적어도 한 번은 할 수있어서 좋을 것입니다. 삽입 및 선택 정렬은 쉽게 마스터 할 수 있으며, 각 배열의 요소를 병렬로 이동할 수 있습니다.

업데이트 : 위와 같이 여러 대의 컴파 이터를 사용할 수 있으므로 필요한 모든 기능을 갖춘 것으로 보이는 this 웹 사이트를 확인하십시오.

+0

O'Reilly 링크가 작동하지 않습니다. –

1

작성자, 제목, 페이지의 세 가지 속성을 모두 사용하여 하나의 클래스를 만들 수 있습니다. 그리고 저자, 제목 및 페이지의 관점에서 독자적으로 비교할 3 개의 비교자를 만들 수 있습니다. 그런 다음 사용자 입력 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')에서 작업 할 때 특히 그렇습니다. –