2011-08-10 23 views
5

Ödevimin yapılması gerekenler: (İki Taraflı Listeler) Tamsayı değerlerini tutan iki bağlı bir liste oluştur. Listeyi değerleri ile doldurun [11, 22, 77, 44, 55, 66, 33]. Listenin içeriğini göster. Değeri daha sonra bile ilk olarak tuhaf olarak ayırmak için bir yöntem yazın. Örneğimizde, yeniden sıralanan liste şöyle olmalıdır: [11, 77, 55, 33, 22, 44, 66].İki Katlı Bağlantılı Liste oluşturulamıyor

Bunu 6 sayıya kadar yapması gerekeni yapmasını ve 7 sayıyı ekleyerek hata yapmasını sağlarım.

Exception in thread "main" java.lang.NullPointerException 
at MyList.sortData(MyList.java:100) 
at Driver.main(Driver.java:24) 



public class Driver { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 

      MyList<Integer> list = new MyList<Integer>(); 
      list.add(11); 
      list.add(22); 
      list.add(77); 
      list.add(44); 
      list.add(55); 
      list.add(66); 
      list.add(33); 

      System.out.println("<<Original Data>>"); 
      list.showData(); 
      System.out.println(); 

      System.out.println("<<Sorted Data>>"); 
      list.sortData(list); 
      list.showData(); 

     } 

    } 





public class MyList<E>{ 

    private Node<E> head; 
    private Node<E> tail; 
    int count; 

    public MyList(){ 
     head = null; 
     tail = null; 
     count = 0; 
    } 

    public Node<E> add(E newData){ 
     Node<E> current = new Node<E>(newData); 

     // case 1: list is empty 
     if (count == 0){ 
     count ++; 
     head = current; 
     tail = current; 
     return current; 
     } 

     // case 2: list is not empty 
     if (count > 0){ 
     count ++; 
     tail.setNext(current); 
     current.setPrior(tail); 
     tail = current; 

     return current; 
     } 
     return null; 
    } 

    public Node<E> removeFirst(){ 
     Node<E> firstNode = head; 

     if (head == tail){ 
     count = 0; 
     head = tail = null; 
     return firstNode; 
     } 
     else{ 
     head = firstNode.getNext(); 
     count --; 
     return firstNode; 
     } 
    } 

    public Node<E> removeLast(){ 
     Node<E> lastNode = tail; 
     Node<E> current = head; 

     if (head == tail){ 
     count = 0; 
     head = tail = null; 
     return lastNode; 
     } 
     else{ 
     count --; 
     tail = tail.getPrior(); 
     tail.setNext(null); 
     return lastNode; 
     } 
    } 

    public Node<E> removeAt(int index){ 
     Node<E> current = head; 
     Node<E> next = null; 
     Node<E> prior = null; 

     if (index > count) return null; 
     if (index == 0) return removeFirst(); 
     if (index == count -1) return removeLast(); 

     else{ 
     for(int i = 0; i < index; i++){ 
      current = current.getNext(); 
     } 

     next = current.getNext(); 
     prior = current.getPrior(); 
     prior.setNext(next); 
     next.setPrior(prior); 
     count--; 
     return next; 
     } 
    } 

    public void sortData(MyList<Integer> list){ 
     Node<E> current = head; 
     int key = 0; 

     while(count > 0){ 
     Node<E> data = current; 

     if((Integer)current.getData() % 2 == 0){ 
      current = (Node<E>) list.removeAt(key); 
      list.add((Integer)data.getData()); 
     } 

     else{ 
      key++; 
      current = current.getNext(); 
     } 

     count--;   
     } 
    } 

    public void showData(){ 
     Node<E> current = head; 
     System.out.print("["); 
     while(current != null){ 
     System.out.println(current.showData()); 
     current = current.getNext(); 
     } 

     System.out.print("]"); 
    } 
} 



    public class Node<E> implements Comparable<E>{ 
    private E data; 
    private Node<E> next;  
    private Node<E> prior; 

    public Node(E newElement){ 
     data = newElement; 
     next = null; 
     prior = null; 

    } 

    public Node<E> getPrior() { 
     return prior; 
    } 

    public void setPrior(Node<E> prior) { 
     this.prior = prior; 
    } 

    public E getData() { 
     return data; 
    } 

    public void setData(E data) { 
     this.data = data; 
    } 

    public Node<E> getNext() { 
     return next; 
    } 

    public void setNext(Node<E> next) { 
     this.next = next; 
    } 

    public String showData(){ 
     String result = " " + data +" "; 
     return result; 
    } 

    @Override 
    public int compareTo(E otherData) { 
     String thisData = (String) data; 
     if (thisData.compareTo((String)otherData) == 0) 
     return 0; 
     else if (thisData.compareTo((String)otherData) < 0) 
     return -1; 
     else 
     return 1; 
    } 
} 
+5

Bu neden azalıyor? Asker ev ödevi kabul etti, kod verdi ve somut bir sorun verdi. İyi niyetli bir çabaya benziyor ve bir cevap vermeyi istemediler. Çaba için yapılan oylamalar, insanların soru sormasını engellemektedir. – ambagesia

cevap

3

Genelde ev ödeviyle ilgili soruları okumaya bile gerek duymuyorum çünkü sorular "Nasıl uygulanır ...". Ama istisna yaptı ve bence çaba biraz ipucu hak ediyor.

"Say" üye alanına bakın. İşlevlerinizden birinin onu çöktüğü yerde, doğru olan birkaç işlev var.

+0

Bahşiş için teşekkürler. Bunu aştım ve her şey sayımla görebildiğim kadar olmalı. Başlaması, ihtiyaç duyduğu yerde artar ve ihtiyaç duyduğu yerde azalır. Konuşmak için "çöpe atıldığını" görmüyorum. Sadece profesöre yarın sormalıyım. Çaba için teşekkürler =) – Zankorel

+1

Ek ipucu, o zaman: sortData() işlevinin ne yapmak istediğini dikkatlice düşün. Listenizdeki değerler çıktıktan sonra ne olmalıdır? – dckrooney

+0

_ (Her iki ipucu da çok iyi: Öğrenci için faydalı yön.) _ –

İlgili konular