Java Can';不要让双链表工作
所以我的家庭作业是: (双链接列表)实现包含整数值的双链接列表。用值[11,22,77,44,55,66,33]填充列表。显示列表的内容。编写一个方法,先将值分成奇数,然后再分成奇数。在我们的示例中,重新排序的列表应该是:[11,77,55,33,22,44,66] 我可以让它工作,做它应该做的事情,最多6个数字,但加上第7个数字,它就会出错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(
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;i我通常甚至不看关于家庭作业的问题,主要是因为这些问题是“如何实施…”。但我破例了,我认为你的努力值得一些提示
查看“计数”成员字段。只有很少的函数依赖于它是正确的,而其中一个函数正在破坏它。为什么这会被否决?询问者承认这是家庭作业,提供了代码,并给出了具体问题。这看起来是一个真诚的努力,他们没有要求得到答复。对努力的否决票会阻止人们提问。谢谢你的提示。我已经检查过了,一切都是我所能看到的。它被初始化,在需要的地方增加,在需要的地方减少。可以说,我不认为它在哪里被“糟蹋”了。明天我得问问我的教授。谢谢你的努力=)另外一个提示:仔细考虑一下你想要你的sortData()函数做什么。列表退出后的值应该是什么?(这两个提示都做得很好:对学生有帮助的方向。)