[英]Java custom to string returning Memory location
我的CirculaList类中的原始toString方法可以正常工作。 但是,当我在堆栈类的toString方法中调用它时,它返回的是我认为是堆栈的内存位置。 我尝试过重载,但没有明显的区别。
我的代码:
CircularList类
public class CircularList{
private Node tail = null;
public void addToFront(int elem){
if(elem >= 0){
Node newNode= new Node(elem);
if(tail != null){
newNode.next = tail.next;
tail.next = newNode;
}else{
tail = newNode;
newNode.next = newNode;
}
}
}
public int deleteFromBack(){
int returned = -1;
if(tail != null){
Node trav = tail;
while(trav.next != tail){
trav = trav.next;
}
returned = tail.data;
if(trav.next == trav){
tail = null;
}else{
trav.next = tail.next;
tail = trav;
}
}
return returned;
}
//@Override
public String toSting(){
String stg = null;
stg = "[";
Node trav = tail.next;
while(trav != tail){
stg += trav.getData() +",";
trav = trav.next;
}
stg += trav.getData() + "]";
return stg;
}
public CircularList clone(CircularList other){
tail = other.tail;
return this;
}
}
堆栈类
public class Stack{
private CircularList list = new CircularList();
public void push(int elem){
list.addToFront(elem);
}
public int pop(){
CircularList tempList = new CircularList();
int keeper = -1;
if(isEmpty() != true){
keeper =list.deleteFromBack();
while(isEmpty() != true){
tempList.addToFront(keeper);
keeper =list.deleteFromBack();
}
list.clone(tempList);
}
return keeper;
}
public int peek(){
CircularList tempList = new CircularList();
int keeper = -1;
if(isEmpty() != true){
while(!isEmpty()){
keeper = list.deleteFromBack();
tempList.addToFront(keeper);
}
list.clone(tempList);
}
return keeper;
}
public boolean isEmpty(){
CircularList tempList = new CircularList();
int keeper = -1;
keeper = list.deleteFromBack();
if(keeper==-1){
return true;
}else{
while(keeper!=-1){
tempList.addToFront(keeper);
keeper = list.deleteFromBack();
}
list.clone(tempList);
}
return false;
}
public Stack clone(Stack other){
list = other.list;
return this;
}
//@Override
public String toSting(){
String stg = list.toString();
return stg;
}
}
测试器类 (顾名思义,它仅用于测试)
public class Tester{
public static void main(String[] args)
{
CircularList list = new CircularList();
System.out.println("CircularList");
System.out.println("=========");
list.addToFront(1);
list.addToFront(2);
list.addToFront(3);
list.addToFront(4);
list.addToFront(5);
System.out.println(list.toSting());
System.out.println("=========");
System.out.println("removing: " + list.deleteFromBack());
System.out.println("=========");
System.out.println(list.toSting());
System.out.println("=====================================================");
System.out.println("stack");
System.out.println("=========");
Stack stack = new Stack();
System.out.println(stack.isEmpty());
System.out.println("=========");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack.toString());
System.out.println(stack.isEmpty());
System.out.println("=========");
System.out.println("first int: " + stack.peek());
System.out.println("=========");
System.out.println("Removing: " + stack.pop());
System.out.println(stack.isEmpty());
}
}
输出 (等于其与布局混乱时所取的相等值)
[5,4,3,2,1]
删除:1
[5,4,3,2]
堆
真正
Stack @ 15db9742否
第一整数:5
删除:5个错误
使用了toSting()而不是toString(),因此调用了对象类toString()。
@Override在这种情况下很有用,它试图告诉我们在重写该方法时犯了一些错误。
在评论@Override之前进行思考总是有帮助的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.