2013-05-22 3 views
0

먼저이 클래스가 숙제와 관련이 있다고 말하게하십시오. 실제로 이미 숙제에 대한 답을 얻었지만 현재 프로그래머로 일하고 있기 때문에 객체 지향 프로그래밍에 대한 이해를 돕기 위해 한발 더 나아가고 싶다고 결정했지만 실제로는 소수에 불과했기 때문에 교육에 약간의 차이가 있습니다. 대학에서의 높은 수준의 프로그래밍 수업, 내가 한 일은 대부분 어셈블리와 C 였는데 분명히 많이 다릅니다.일반 정렬 클래스를 정의하는 방법

어쨌든 저는 숙제를위한 버블 정렬을 써야했습니다. 문제 없어. 그러나 제네릭에 대해서도 읽고 있었고 이해하지 못했고 제 자신의 이해를 위해 일반적인 거품을 만들고 싶었습니다.

제네릭을 사용하는 이유는 다른 유형의 데이터에서 동일한 제네릭 클래스를 사용할 수 있다는 것입니다.

내 주요 메소드에서 doBubbleSort 메소드를 호출하고 int의 arraylist를 보냅니다. 나는 어떤 종류의 arraylist 그것을 보낼 수 있기를 원합니다. 여기

은 내 거품 정렬 제네릭에 대한 업데이트됩니다

public static<T> ArrayList doBubbleSort(ArrayList<T> arrayList) 
{ 
    boolean wasSwapped;// 
    do{ 
     wasSwapped = false; 
     for (int i=1; i<arrayList.size();i++) 
     { 
      int b = arrayList.get(i-1).compareTo(arrayList.get(i)); 
      if (b<0) 
      { 
       int temp = arrayList[i]; 
       arrayList[i] = arrayList[i-1]; 
       arrayList[i-1] = temp; 
       wasSwapped = true; 
      } 


     } 
    }while (wasSwapped); 
    return arrayList; 
} 

내 인생 내가 제대로 비교 문을 사용하는 방법을 알아낼 수 없습니다. 현재 기호 - 메서드 compareTo (T)를 찾을 수 없습니다. 나는 여기 누군가가 나에게 올바른 방향으로 찔러 주길 바랬다.

또한 somepoint에서 유형을 지정해야한다는 것을 알고 있습니다. 메서드 호출에서 수행하는 것이 좋습니까? 아니면 메서드 자체에 있어야합니다. 나는 이것을 다음과 같이 가정한다. ArrayList al = Sorting.doBubbleSort (al); 그리고 문자열을 대신 정렬하려면 ArrayList al = Sorting.doBubbleSort (al);

제가 제 비교를 도와 주시고 제네릭에 대한 제 이해와 함께 제가 어디를 가는지 알려주십시오. 감사합니다.

지금까지 도와 주셔서 감사합니다. @LuiggiMendoza와 @newaccts 제안을 모두 반영하도록 코드를 변경했습니다. 많은 논쟁 끝에 나는 그것을 작동 시켰고 나는 그것을 올바르게 이해하기 시작했다고 생각한다. 유일한 문제는 temp에 대한 일반 변수를 선언하는 방법을 알 수 없다는 것입니다. 지금은 다른 일반 목록을 추가했고 스왑에 요소 0을 사용하고 있지만 꽤 비효율적으로 보이므로 어떤 제안을 할 수 있는지 궁금합니다.

public static<T extends Comparable<? super T>> List<T> doBubbleSort(List<T> list) 
    { 
     boolean wasSwapped; 
     List<T> temp = new ArrayList<>(); 
     temp.add(list.get(0)); 

     do{ 
      wasSwapped = false; 
      for (int i=1; i<list.size();i++) 
      { 
       int b = list.get(i-1).compareTo(list.get(i)); 
       temp.set(0,list.get(i)); 
       if (b>0) 
       {  
        list.set(i,list.get(i-1));//list[i] = list[i-1]; 
        list.set(i-1,temp.get(0));//list[i-1] = temp; 
        wasSwapped = true; 
       } 


      } 
     }while (wasSwapped); 
     return list; 
    } 

} 

답변

4

요소를 비교하는 방법이 필요합니다.

public static<T extends Comparable<T>> ArrayList<T> doBubbleSort(ArrayList<T> arrayList) 

또는 더 나은 (인터페이스에 대한 코딩) : @LuiggiMendoza 알처럼

public static<T extends Comparable<T>> List<T> doBubbleSort(List<T> list) 

또 다른 방법은하는 Comparator에를 제공하기 위해이 문제를 해결하는 가장 일반적인 방법은 Comparable 구현할 것을 요구하는 것입니다

public static <T> doBubbleSort(List<T> list, Comparator<T> comparator) 
+2

보다 유연한 접근 방식 :'공공 정적 doBubbleSort (목록 목록, 컴 비교를 할 parator 비교기)'. –

+0

최상의 결과를 얻으려면 'T extends Comparable ' – newacct

+0

모든 답변을 고려하기 위해 위 코드를 업데이트했습니다. 스와핑을위한 임시 변수를 받아들이는 것은 모두 잘 작동합니다.나는 다른 List를 사용하지 않고 어떻게 작동하는지 알아낼 수 없다. 어떤 조언을 주시면 감사하겠습니다. 감사. – MichelleJS

관련 문제