2017-03-12 58 views
1
import java .util.*; 
import java.io.*; 
class MaxIt<T extends Number > 
    { 
    T x; 
public T maxi(T a,T b) 
    { 
    if(a>b) 
     return a; 
    else 
     return b; 
    } 
} 
public class MaxGen{ 
    public static void main(String[] args) 
{ 

    MaxIt<Integer> i=new MaxIt<Integer>(); 
    System.out.println("enter two integer "); 
    int a,b; 
    Scanner sc=new Scanner(System.in); 
    a=sc.nextInt(); 
    b=sc.nextInt(); 
    System.out.println(a,b); 

} } 

我在讀關於泛型,所以我試圖做一個通用的程序來尋找最大的兩個數字,但是當我編譯它時,它給了我一個錯誤說 - 壞操作數類型對於二元運算符'>'。 你能告訴我這段代碼有什麼問題嗎?最大數字的通用代碼

+0

你已經使用了局部變量而不是初始化它們......這個不應該編譯。 – minigeek

+0

[Java比較泛型類型]的可能重複(http://stackoverflow.com/questions/20793082/java-comparing-generic-types) – Guy

+1

您不能直接在'Number'上使用'<''。儘管你可以在'Number'的'doubleValue()'上使用它。 –

回答

1

您應該使用Comparable,並且您可能會製作方法static並且它可能需要可變數量的參數。類似的,

public static <T extends Comparable<? super T>> T maxi(T... vals) { 
    if (vals == null || vals.length == 0) { 
     return null; 
    } 
    T m = vals[0]; 
    for (int i = 1; i < vals.length; i++) { 
     if (m.compareTo(vals[i]) < 1) { 
      m = vals[i]; 
     } 
    } 
    return m; 
} 

然後你需要真正調用它。類似的,

System.out.println(maxi(a,b)); 
+0

好了,現在它正在工作,但我無法理解兩件事。 和2.爲什麼我們不能使用'<'。 –

+1

** 1。** [什麼是PECS(Producer Extends Consumer Super)?](http://stackoverflow.com/q/2723397/2970947)** 2。**因爲Java確實沒有** [ *運算符重載*](https://en.wikipedia.org/wiki/Operator_overloading)。 –