Java Can';不要让双链表工作

Java Can';不要让双链表工作,java,Java,所以我的家庭作业是: (双链接列表)实现包含整数值的双链接列表。用值[11,22,77,44,55,66,33]填充列表。显示列表的内容。编写一个方法,先将值分成奇数,然后再分成奇数。在我们的示例中,重新排序的列表应该是:[11,77,55,33,22,44,66] 我可以让它工作,做它应该做的事情,最多6个数字,但加上第7个数字,它就会出错 Exception in thread "main" java.lang.NullPointerException at MyList.sortData(

所以我的家庭作业是: (双链接列表)实现包含整数值的双链接列表。用值[11,22,77,44,55,66,33]填充列表。显示列表的内容。编写一个方法,先将值分成奇数,然后再分成奇数。在我们的示例中,重新排序的列表应该是:[11,77,55,33,22,44,66]

我可以让它工作,做它应该做的事情,最多6个数字,但加上第7个数字,它就会出错

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;
   }
}
线程“main”java.lang.NullPointerException中的异常 在MyList.sortData(MyList.java:100) 位于Driver.main(Driver.java:24) 公务舱司机{ /** *@param args */ 公共静态void main(字符串[]args){ MyList=新建MyList(); 增加(11); 增加(22); 增加(77); 增加(44); 增加(55); 增加(66); 增加(33); System.out.println(“”); list.showData(); System.out.println(); System.out.println(“”); 列表。排序数据(列表); list.showData(); } } 公共类MyList{ 专用节点头; 私有节点尾部; 整数计数; 公共MyList(){ head=null; tail=null; 计数=0; } 公共节点添加(E新数据){ 节点当前=新节点(newData); //案例1:列表为空 如果(计数=0){ 计数++; 水头=电流; 尾=电流; 回流; } //案例2:列表不是空的 如果(计数>0){ 计数++; tail.setNext(当前); 当前设置优先级(尾部); 尾=电流; 回流; } 返回null; } 公共节点removeFirst(){ Node firstNode=头部; 如果(头=尾){ 计数=0; 头=尾=空; 返回第一个节点; } 否则{ head=firstNode.getNext(); 计数--; 返回第一个节点; } } 公共节点removeLast(){ 节点lastNode=尾部; 节点电流=头; 如果(头=尾){ 计数=0; 头=尾=空; 返回最后一个节点; } 否则{ 计数--; tail=tail.getPrior(); tail.setNext(null); 返回最后一个节点; } } 公共节点移除(int索引){ 节点电流=头; Node next=null; 节点优先级=空; 如果(索引>计数)返回null; if(index==0)返回removeFirst(); if(index==count-1)返回removeLast(); 否则{ 对于(int i=0;i0){ 节点数据=当前; 如果((整数)current.getData()%2==0){ current=(节点)list.removeAt(键); add((整数)data.getData()); } 否则{ key++; current=current.getNext(); } 计数--; } } 公共void showData(){ 节点电流=头; 系统输出打印(“[”); while(当前!=null){ System.out.println(current.showData()); current=current.getNext(); } 系统输出打印(“]); } } 公共类节点实现了可比较的{ 私人电子数据; 私有节点下一步; 私有节点优先; 公共节点(E新元素){ 数据=新元素; next=null; prior=null; } 公共节点getPrior(){ 提前返回; } 公共void setprevior(节点previor){ 这个。先验=先验; } 公共E getData(){ 返回数据; } 公共无效设置数据(E数据){ 这个数据=数据; } 公共节点getNext(){ 下一步返回; } 公共void setNext(节点next){ this.next=next; } 公共字符串showData(){ 字符串结果=“数据+”; 返回结果; } @凌驾 公共整数比较(E其他数据){ 字符串thisData=(字符串)数据; if(thisData.compareTo((字符串)otherData)==0) 返回0; else if(thisData.compareTo((字符串)otherData)<0) 返回-1; 其他的 返回1; } }
我通常甚至不看关于家庭作业的问题,主要是因为这些问题是“如何实施…”。但我破例了,我认为你的努力值得一些提示


查看“计数”成员字段。只有很少的函数依赖于它是正确的,而其中一个函数正在破坏它。

为什么这会被否决?询问者承认这是家庭作业,提供了代码,并给出了具体问题。这看起来是一个真诚的努力,他们没有要求得到答复。对努力的否决票会阻止人们提问。谢谢你的提示。我已经检查过了,一切都是我所能看到的。它被初始化,在需要的地方增加,在需要的地方减少。可以说,我不认为它在哪里被“糟蹋”了。明天我得问问我的教授。谢谢你的努力=)另外一个提示:仔细考虑一下你想要你的sortData()函数做什么。列表退出后的值应该是什么?(这两个提示都做得很好:对学生有帮助的方向。)