2016-04-13 14 views
1

İki listeyi (Array Tabanlı Listeler) birleştirmek için bir Birleştirme yöntemi oluşturmalıyım. Benim yöntemim işe yarıyor, ama şimdi yöntemimi jeneriklerle değiştirmem gerekiyor. Bu benim jenerik olmayan yöntemim ve işe yarıyor. Ama ben onu jeneriklere dönüştürmek için sıkıntı yaşıyorum.Java'da Generikler, Birleştirme yöntemi

public OrderedArrayList merge(OrderedArrayList list2){ 
     OrderedArrayList result = new OrderedArrayList(length + list2.length); 
     int list1Index = 0; 
     int list2Index = 0; 
     for (int i = 0; i < result.maxSize; i++) { 
      if (list1Index == list.length) { 
       result.insert(list2.list[list2Index]); 
       list2Index++; 
      } else if (list2Index == list2.length) { 
       result.insert(list[list1Index]); 
       list1Index++; 
      } else if (list[list1Index] < list2.list[list2Index]) { 
       result.insert(list[list1Index]); 
       list1Index++; 
      } else { 
       result.insert(list2.list[list2Index]); 
       list2Index++; 
      } 
     } 
     return result; 
    } 

Bu, yukarıdaki iletiyi jeneriklere dönüştürme girişimimdir.

public <T extends Comparable<T> > OrderedArrayList1<T> merge(OrderedArrayList1<T> list2){ 
     OrderedArrayList1 result = new OrderedArrayList1(length + list2.length); 
     int list1Index = 0; 
     int list2Index = 0; 
     for (int i = 0; i < result.maxSize; i++) { 
      T temp = list[list1Index]; 
      T temp1 = list[list2Index]; 
      if (temp.compareTo(temp1) == 0) { 
       result.insert(list2.list[list2Index]); 
       list2Index++; 
      } else if (temp1.compareTo(temp)==0) { 
       result.insert(list[list1Index]); 
       list1Index++; 
      } else if (temp.compareTo(temp1) < 0) { 
       result.insert(list[list1Index]); 
       list1Index++; 
      } else { 
       result.insert(list2.list[list2Index]); 
       list2Index++; 
      } 
     } 
     return result; 
    } 

Çok sayıda hata var ve buna uymuyor veya çalışmıyor. Bu aldığım hatalardan biri: Hata: uyumsuz türler: T, T

'a dönüştürülemez. Teşekkür ederim.

+3

Genel sürümünüzde ham türleri kullanmayın. – Savior

+1

Lütfen "OrderedArrayList1" sınıfınızın bildirimini verin - özellikle sınıf düzeyinde hangi tip değişkenleri beyan edildi. –

+0

Not: 'temp.compareTo (temp1)' değerini değerlendirmeye devam etmeniz gerekmez - sonucu bir değişkende saklayın ve bunu kullanın. Ayrıca, karşılaştırma * * simetrik olmayacaktır, yani 'temp.compareTo (temp1) '' temp1.compareTo (temp) 'ile aynı olmalıdır. –

cevap

4

yöntemine çıkarın, sınıf düzeyinde <T extends Comparable<T> > ilan varsayarsak: Aksi

class OrderedArrayList1<T extends Comparable<T> > { 
    public OrderedArrayList1<T> merge(OrderedArrayList1<T> list2) { 
    ... 
    } 
} 

, sen dolayısıyla biraz şifreli sadece aynı ada sahip olur farklı bir tip değişken tanımlarken "T, T'ye dönüştürülemez" mesajı.

İlgili konular