2016-04-10 22 views
1

Özel Sipariş Edilen Bağlantılı Listeyi sıfırdan oluşturduğum bir ödevim vardı. Ödevin yanında mükemmel bir skor aldığım için mutluydum, ancak kopyalamaya izin vermediğim için sayıldım. Diyelim ki "A" ve tekrar "A" ekliyorum. Sadece bir "A" yazdırır. Bunu nasıl uygulayabileceğime dair herhangi bir önerisi var mı? Ekleme yöntemimi göstereceğim. Daha fazla kod isteyen biri varsa, sormaya çekinmeyin ve memnuniyetle sunarım.Özel Sipariş Edilen Bağlantılı Liste sınıfında yinelemelere nasıl izin verebilirim?

NOT: Ödev zaten tamamlanmış, bu yüzden zaten derecelendirilmiş. Bu başka bir öğeye eşitse yine öğeyi eklemek sağlayacak gibi

public boolean add(Comparable obj) { 
    // TODO: Implement this method (8 points) 

    //FOR REFERENCE - public OrderedListNode(Comparable item, OrderedListNode previous, OrderedListNode next) { 

    try { 
     OrderedListNode node; //create new OrderedListNode for comparison 

     for (node = head; node.next != tail; node = node.next) { //loop one node at a time until next node is tail 

      int compare = obj.compareTo(node.next.dataItem); //compare current object with next node 

      if (compare == 0) { 
       return false; // Nope 
      } 
      if (compare < 0) { //obj is less than next node, so insert previous next 
       break; 
      } 
     } 
     OrderedListNode newNode = new OrderedListNode(obj, node, node.next); 
     newNode.next.previous = newNode; //swapping nodes 
     node.next = newNode; 
     System.out.println("Added: " + obj); //display elements added 

     modCount++; //another modification 
     theSize++; //increment size by 1 

    } catch (ClassCastException e) { //give message to user 
     System.out.println(RED + "Caught Exception" + RESET_COLOR); 
     System.out.println("'" + obj +"'" + RED + " not added" + RESET_COLOR); 
    } 
    return true; //successful add 
} 

cevap

1

Değişim

if (compare == 0) { 
return false; // Nope 
} 
if (compare < 0) { //obj is less than next node, so insert previous next 
break; 
} 

Bana göre

if (compare <= 0) { //obj is less than or equal next node, so insert previous next 
break; 
} 

için görünüyor.

+0

Bir dakika. Bu mantıklı. Denemelisin. – IRGeekSauce

+0

Hayır. Henüz çalışmıyor. Not: İlkini dahil ettim (karşılaştırın == 0). – IRGeekSauce

+0

@IRGeekSauce içermez - ilk karşılaştırma, eğer eşitse, yöntemden çıkar. Sorununuzu çözmek için durmamız gereken şeylerden biri budur. Eğer hala işe yaramazsa haberim olsun ve daha fazla bakacağım. – nhouser9