2011-10-14 3 views
0

안녕하세요 저는이 프로그램을 작성 중이며 배열에서 두 항목을 비교하여 가장 큰 항목을 찾는 방법을 알아 내려고하고 있습니다.AnyType 배열에서 가장 큰 것을 찾으십시오

public static <T extends Comparable< ? super T>> T getLargest(T [] a, int low, int high){ 
    if(low>high) 
      throw new IllegalArgumentException(); 
    T[] arrCopy = (T[]) new Object[high-low] 
    for(int i=low;i<high;i++){ 
     if(a[i]>a[i+1]) 
      arrCopy[i]=a[i]; 
     else 
      arrCopy[i]=a[i+1]; 
    } 
    return arrCopy[0]; 
} 

그러나 나는 그것을 테스트하는 방법을 모른다, 나는 시도 :

T[] a = {1,12,7,45,22,23,5}; 
    System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: " + rec.getLargest(a, 0, 6)); 

하지만 오류 메시지가

방법 getLargest (T []를 얻을, int, int) 타입은 Rec (int [], int, int) 인수에는 적용 할 수 없습니다.

어떻게 m 숫자의 배열? 가장 큰 문자열을 얻으려는 코드로 문자열 배열을 사용할 수 있습니까?

어쩌면 간단한 답변 일지 모르지만 나는 잠시 동안 전체 프로그램을 작업 해 왔으며 모든 것이 분명해 보이지 않습니다.

[]에 정수 [] INT에서 배열을 변경 한 후 EDIT

. 내가

운영자 말을이 라인 if(a[i]>a[i+1]) 에 오류를 얻고있다> 내가 할 수있는 > 기호를 변경해야 할 것입니다 있으리라 믿고있어, 인수의 형태 (들) T에 대한 T

을 정의되지 배열의 요소를 비교하지만 어떻게해야합니까? compareTo()를 사용 하시겠습니까?

답변

2

intComparable의 하위 클래스가 아니기 때문에 작동하지 않습니다. Object이 아니기 때문입니다. 기본적으로 제네릭에는 프리미티브 (int, short, long, char, boolean, byte)를 사용할 수 없습니다.

배열을 Integer으로하여 호출 해보십시오. 당신이 당신의 방법은 int[] 수용 할 수있게하려면

Integer[] a = {1,12,7,45,22,23,5}; 
System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: " + rec.getLargest(a, 0, 6)) 

, 당신은 당신이 동의 할 각 하나 (int getLargest(int[], int, int), char getLargest(char[], int, int) 등)에 대한 별도의 기능을 가지고해야합니다.

편집 : 귀하의 편집에 대응

, 당신은 compareTo()를 사용해야합니다. <은 프리미티브에만 정의됩니다.

+0

좋아, 완벽하게 작동했습니다. 매우 감사합니다. – randomizertech

+0

이제 다른 오류가 나타납니다. 편집을 참조하십시오. – randomizertech

+0

@ fgualda87 - 나는 대답했다. 그러나 일반적으로이 사이트의 각 질문은 하나의 질문이어야한다. 더 많은 질문이 있으면 새 질문을 엽니 다. 그렇게 빨리 답을 얻을 수 있습니다. (내가 이미 가지고 있다고 생각했기 때문에 다른 사람이 대답하지 않았다고 가정합니다.) –

관련 문제