您好,我正在尝试测试removeCity(),但是它没有删除我提供的任何元素。
还有方法addToList()如果我在City类中使用它,则在测试类中可以正常工作的同时得到“线程“ main”中的异常“ java.lang.StackOverflowError”

有什么帮助吗?

我的列表

public class MyList<T> {
private  Node head;
private Node tail;

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

public void addToTail(T info){
    Node n;
    //case 1: empty List
    if(isEmpty()){
        n = new Node(info, null);
        head = n;
        tail = head;
    }
    //case 2: if the list is not empty
    else {
        n = new Node(info, null);
        tail.setNext(n);
        tail = n;
    }
}

public void addToHead(T info){
    Node n;
    //case 1: empty List
    if(isEmpty()){
        n = new Node(info, null);
        head = n;
        tail = head;
    }
    //case 2: if the list is not empty
    else {
        n = new Node(info, head);
        head = n;
    }
}

    public boolean removeHead(){
        //Case 1: if the list is empty
        if(isEmpty())
            return false;
        //case 2: if the list have at least one element
        else{
            Node n = head.getNext();
            head = n;
            return true;
        }

    }

    public boolean removeElement(String element){

        //cacs 1 if before is the head
        if(isEmpty())
            return false;

        if( ((City) head.getInfo()).getCode().equals(element)){
            removeHead();
            return true;
        }

        Node iter = head.getNext();
        Node prev = head;
        while(iter != null && !((City) head.getInfo()).getCode().equals(element)){
            iter = iter.getNext();
            prev = prev.getNext();
        }
        if(iter == null)
            return false;
        else{
            prev.setNext(iter.getNext());
            return true;
        }
    }

    //To check if the list is empty
    public boolean isEmpty(){
        if ( head == null)
            return true;
        else
            return false;
    }


节点

public class Node<T> {


    private T info;
    private Node next;

    public Node(){
        info = null;
        next = null;
    }

    public Node(T info, Node next){
        this.info = info;
        this.next = next;
    }

    public T getInfo(){
        return info;
    }

    public Node getNext(){
        return next;
    }

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

    public void setInfo(T info){
        this.info = info;
    }

    }




    public class City implements Serializable {
        public static MyList<City> cityList = new MyList<City>();
        private String name;
        private String code;

        public City(String name, String code) {
           super();
           this.name = name;
           this.code = code;
           addToList(new City(name,code));
        }

        public void addToList(City toAdd){
           City.cityList.addToHead(toAdd);
        }

        public static void removeCity(String name){
            if( cityList.isEmpty()){
                System.out.println("The List is empty");
                return;
            }
            if ( cityList.removeElement(name) == true )
                System.out.println("The City was removed sucssesfully");
            else
                System.out.println("This city does not not exist");
        }

    }


测试

public class DummyTest {
    public static void main(String [] args){
        City x = new City("Ney York","NY");
        City y = new City("London","LD");
        System.out.println(City.cityList);
    }
}


堆栈跟踪

Exception in thread "main" java.lang.StackOverflowError
    at City.<init>(City.java:15)
    at City.<init>(City.java:18)
    at City.<init>(City.java:18)


第15行是构造函数


  公共城市(字符串名称,字符串代码)


第18行是addToList


  addToList(新城市(名称,代码))

最佳答案

我发现您在while方法的removeElement循环中遇到问题。
我不确定是否能解决您的问题。
您还可以在这里放一部分stacktrace吗,您是否得到StackOverflowException

    Node iter = head.getNext();
    Node prev = head;
    while(iter != null && !((City) head.getInfo()).getCode().equals(element)){
        iter = iter.getNext();
        prev = prev.getNext();
    }


这条线

   while(iter != null && !((City) head.getInfo()).getCode().equals(element))


应该是

   while(iter != null && !((City) iter.getInfo()).getCode().equals(element))


iter代替head

10-08 01:33