【发布时间】:2015-03-24 19:40:32
【问题描述】:
检查这段代码,我在其中创建了一个单链表,但很久以来我一直收到此错误。请大侠们找出错误。基本上是autoboxing 和unboxing 的问题。当我附加一个具有对象参数的整数时出现错误,并且出现此错误“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