【问题标题】:Java Error coming - The method append(Object) in the type LList is not applicable for the arguments (int)Java 错误即将到来 - LList 类型中的方法 append(Object) 不适用于参数 (int)
【发布时间】:2015-03-24 19:40:32
【问题描述】:

检查这段代码,我在其中创建了一个单链表,但很久以来我一直收到此错误。请大侠们找出错误。基本上是autoboxingunboxing 的问题。当我附加一个具有对象参数的整数时出现错误,并且出现此错误“LList 类型中的方法 append(Object) 不适用于参数 (int) "

public class LList {
private LLNode head;
private LLNode tail;
int size;

private class LLNode{
    Object data;
    LLNode next;

    public Object getData() {
        return data;
    }

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

    public LLNode getNext() {
        return next;
    }

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

    public String toString(){
        return data.toString();
    }
}

public LList(){
    head = new LLNode();
    tail = new LLNode();
    head = null;
    tail = null;
    //head.setData(obj);
    //head.setNext(null);
    size = 0;
}

public void insert(int pos, Object obj){
    if(pos == 0 && size == 0){
        LLNode temp = new LLNode();
        temp.setData(obj);
        temp.setNext(null);
        head = temp;
        tail = temp;
        size++;
    }
    else if(pos == 0 && size != 0){
        LLNode temp = new LLNode();
        temp.setData(obj);
        temp.setNext(head);
        head = temp;
        size++;
    }

    else{
        //System.out.println("ok2");
        int flag = 0;
        LLNode current = new LLNode();
        LLNode temp = new LLNode();
        current = head;
        for(int i = 1; i < pos; i++){
            if(current.getNext() == null){
                System.out.println("position greater than no of elements");
                flag = 1;
                break;
            }
            current = current.getNext();
        }

        LLNode node;
        node = new LLNode();
        node.setData(obj);
        if(current.getNext() != null && flag == 0){
            temp = current.getNext();
            current.setNext(node);
            node.setNext(temp);
            size++;
        }
        else if(flag == 0){
            current.setNext(node);
            node.setNext(null);
            tail = node;
            size++;
        }
    }

}

public void remove(int pos){
    if(pos == 0){
        LLNode current = new LLNode();
        current = head;
        if(head.getNext() == null){
            head = null;
            tail =null;
        }
        else{
            head = head.getNext();
            current = null;
        }
        size--;
    }

    else{
        int flag = 0;
        LLNode current = new LLNode();
        LLNode temp = new LLNode();
        current = head;
        for(int i = 0; i < pos - 1; i++){
            current = current.getNext();
            if(current.getNext() == null){
                flag = 1;
                break;
            }
        }
        if(flag != 1){
            temp = current;
            temp = temp.getNext();
            if(temp.getNext() != null){
                temp = temp.getNext();
                current.setNext(temp);
            }
            else{
                current.setNext(null);
            }
            size--;
        }
    }       
}

public Object get(int pos){
    LLNode temp = new LLNode();
    temp = head;
    for(int i = 0; i < pos; i++){
        temp = temp.getNext();
        if(temp.getNext() == null && (pos - i) > 1){
            return "position greater than size";
        }
    }
    return temp.getData();
}

public int find(Object obj){
    int i = 1, count = 0;
    LLNode current = new LLNode();
    current = head;
    while(i == 1){
        count++;
        if(current.getData() == obj){
            break;
        }
        if(current.getNext() == null){
            break;
        }
        current = current.getNext();
    }
    return count;
}

public int size(){
    /*int count = 1, i = 1;
    LLNode current = new LLNode();
    current = head;
    while(i == 1){
        current = current.getNext();
        count++;
        if(current.getNext() == null){
            break;
        }
    }*/
    //System.out.println(size);
    //return count;
    return size;
}

public void clear(){
    head = null;
    tail = null;
    size = 0;

}

public void append(Object obj){
    /*LLNode current = new LLNode();
    LLNode new_obj = new LLNode();
    if(head == null){
        new_obj.setData(obj);
        new_obj.setNext(null);
        head = new_obj;
        tail = new_obj;
        size++;
    }
    else{
        current = head;
        int i = 1;
        while(i == 1){
            if(current.getNext() == null){
                break;
            }
            current = current.getNext();
        }
        current.setNext(new_obj);
        new_obj.setData(obj);
        new_obj.setNext(null);
        size++;
    }*/

    //using tail
    LLNode node = new LLNode();
    if(head ==null){
        node.setData(obj);
        node.setNext(null);
        head = node;
        tail = node;
    }
    else{
        node.setData(obj);
        tail.setNext(node);
        node.setNext(null);
        tail = node;
    }
    size++;
}

public String toString(){
    String list = "";
    LLNode current = new LLNode();
    current = head;
    if(head == null){
        return "empty";
    }
    for(int i = 0; i < size; i++){
        list = list + current.toString() + " | ";
        current = current.getNext();
    }
    return list;
}

public static void main(String[] args){
    LList bookList = new LList();
    bookList.insert(0, "Hamlet");
    System.out.println(bookList);
    bookList.insert(0, "Cosmos");
    System.out.println(bookList);
    // autoboxing and unboxing
    //bookList.clear();
    bookList.append(1);
    /*bookList.append(2);
    bookList.append(3);
    System.out.println(bookList);
    pos = bookList.find(2);
    bookList.remove(pos);*/
    System.out.println(bookList);
    }

}

【问题讨论】:

  • 你的代码对我来说很好,所以我猜你没有使用你认为的 Java 版本。

标签: java class object linked-list autoboxing


【解决方案1】:

一些较旧的 java 版本不会将 int 隐式转换为 new Integer(0)。如果您使用的是旧版本的 java,只需显式创建一个新的 Integer-object。

【讨论】:

  • 我的java版本不是1.8.0_31。我应该安装哪个 java 版本?
  • newest on 是值得推荐的,但我不知道,因为添加了 int 的隐式转换是哪个版本
猜你喜欢
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2018-01-09
  • 2017-08-15
相关资源
最近更新 更多