【发布时间】:2014-05-26 03:03:51
【问题描述】:
我现在只是在 Java 中闲逛,尝试使用链表实现类似于堆栈的东西。
class ListStack {
int value;
int size;
ListStack next;
public ListStack (int add) {
this.size = 1;
this.value = add;
this.next = null;
}
public void push (int add) {
this.next = this;
this.value = add;
this.size++;
}
public int pop() {
if (this.size == 0) { throw new EmptyListStackException(); }
int i = this.value;
this = this.next;
this.size--;
return i;
}
public int size() {
return this.size;
}
public int peek() {
return this.value;
}
}
基本上它是一个在前面插入的链表,它也从前面删除。当我尝试执行 this = this.next 时,NetBeans 弹出错误;它说我无法重新分配最终值this。
我希望我的最终实现执行如下操作:
ListStack var = new ListStack(5); //var is now 5 -> null
var.push(3); //var is now 3 -> 5 -> null
int val = varr.pop(); //var is now 5 -> null, val == 3
评论把this = this.next 代码,其余的似乎工作。
ListStack a = new ListStack(5);
System.out.println(a.size()); //prints 1
System.out.println(a.peek()); //prints 5
a.push(4);
System.out.println(a.size()); //prints 2
System.out.println(a.peek()); //prints 4
a.push(6);
System.out.println(a.size()); //prints 3
System.out.println(a.peek()); //prints 6
a.push(1);
System.out.println(a.size()); //prints 4
System.out.println(a.peek()); //prints 1
//a is 1 -> 6 -> 4 -> 5 -> null
【问题讨论】:
-
this指的是当前对象。这就像说:“我是”或“我的名字是”。你无法改变自己。 -
@SotiriosDelimanolis 生活课程和 Java 课程
-
那是因为你不能重新分配
this。您需要做的是为您的列表设置一个锚点对象。否则,您无法从列表的头部添加/删除。 -
基本上,您编写了一个类,说它应该是一个“堆栈”,它是元素的集合,但您的实现看起来像 一个元素的实现> 一堆。 (单个元素会有
next,但整个堆栈不会。)考虑将其分为两个类。 -
如果所有
push都应该存储一个数字并增加另一个数字,是的,它“按预期”工作。通过这种措施,pop甚至无法编译时“按预期”工作。
标签: java reference this abstract-data-type