먼저이 클래스가 숙제와 관련이 있다고 말하게하십시오. 실제로 이미 숙제에 대한 답을 얻었지만 현재 프로그래머로 일하고 있기 때문에 객체 지향 프로그래밍에 대한 이해를 돕기 위해 한발 더 나아가고 싶다고 결정했지만 실제로는 소수에 불과했기 때문에 교육에 약간의 차이가 있습니다. 대학에서의 높은 수준의 프로그래밍 수업, 내가 한 일은 대부분 어셈블리와 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;
}
}
보다 유연한 접근 방식 :'공공 정적 doBubbleSort (목록 목록, 컴 비교를 할 parator 비교기)'. –
최상의 결과를 얻으려면 'T extends Comparable super T>' – newacct
모든 답변을 고려하기 위해 위 코드를 업데이트했습니다. 스와핑을위한 임시 변수를 받아들이는 것은 모두 잘 작동합니다.나는 다른 List를 사용하지 않고 어떻게 작동하는지 알아낼 수 없다. 어떤 조언을 주시면 감사하겠습니다. 감사. – MichelleJS