当前位置: 首页 > 知识库问答 >
问题:

LinkedStack操作方法

单于帅
2023-03-14

我现在开始使用LinkedStacks,我想知道为什么toString和pop方法不起作用?我使用的方法是本书中给出的默认方法,即Pop和toString方法,其余的方法都是我工作过的,并且运行良好。push方法完美地添加了元素。peek在不改变列表和大小的情况下查看top元素,返回使用push方法的次数。奇怪的是,pop方法只工作一次,然后就会出现错误。请注意,书中给出的Stacks一节中的toString方法似乎也不起作用。我会很乐意接受任何指示,但请知道,我只是一个初学者,我正在学习。这是类的代码:

public class LinkedStack<T> implements Stack<T> {



private int count;
private LinearNode<T> top;

//-----------------------------------------------------------------
// Creates an empty stack using the default capacity.
//-----------------------------------------------------------------
public LinkedStack()
{
count = 0;
top = null;
}


    @Override
    public boolean IsEmpty()

    {
        if(top == null)
        {
        System.out.println("Stack is empty");
        }
        return top == null;
    }

    @Override
    public void Push(T element)
{

    top = new LinearNode(element, top);
    System.out.println(element);
    count++;


}

    @Override 
    public T Pop() 
{
    T result;
    System.out.println("Lets pop the top element!");

    if (count == 0) 
    {
    System.out.println("Pop operation failed. "+ "The stack is empty.");
    }

    result = top.getElement();
    top = top.getNext();
    count--;
    System.out.println("The element that we have poped is :" + result);
    return result;

}

    Override
    public String toString()
{

    String result = "<top of stack>\n";
LinearNode current = top;
while (current != null)
{
result += current.getElement() + "\n";
current = current.getNext();
}
return result + "<bottom of stack>";

}

    @Override
    public T Peek() {
        System.out.println("Lets peek the top element!");
        if(count == 0)
        {
         System.out.println("Peek failed stack is empty");
        }
        System.out.println("The element that we have peeked is: " + top.getElement());
        return top.getElement();

    }

    @Override
    public int Size() {
        System.out.println("The size of the list now is: " + count);
        return count;
    }


    }
public static void main(String[]args)
{
 LinkedStack<Integer> main = new LinkedStack<>();   
 main.Push(1);
 main.Push(2);
 main.Push(3);
 main.Size();
 main.Peek();
 main.Pop();
 main.Pop();
 main.Size();
 main.toString();


}
1
Exception in thread "main" java.lang.NullPointerException
2
3
The size of the list now is: 3
Lets peek the top element!
The element that we have peeked is: 3
Lets pop the top element!
The element that we have poped is: 3
Lets pop the top element!
    at LinkNod.LinkedStack.Pop(LinkedStack.java:64)
    at LinkNod.LSmain.main(LSmain.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
run:
1
2
3
The size of the list now is: 3
Lets peek the top element!
The element that we have peeked is: 3
Lets pop the top element!
The element that we have poped is: 3
The size of the list now is: 2
@Override
    public void Push(T element)
{

     LinearNode<T> current = new LinearNode<>(element); 

     current.setNext(top);
     top = current;
     count++;


}
public class LSmain {

    public static void main(String[]args)
    {
     LinkedStack<Integer> list = new LinkedStack<>();   
     System.out.println("Let's make a List!");
     System.out.println("Push 3 times.");
     System.out.println("Check the size.");
     System.out.println("Peek the top element.");
     System.out.println("Pop three times.");
     System.out.println("The size now should be zero!" + "\n");
     list.Push(1);
     list.Push(2);
     list.Push(3);
     System.out.println(list.toString());
     list.Size();
     list.Peek();
     list.Pop();
     list.Pop();
     list.Pop();
     list.Size();



    }
run:
Let's make a List!
Push 3 times.
Check the size.
Peek the top element.
Pop three times.
The size now should be zero!

<top of stack-->[3][2][1]<--bottom of stack>

Let's check the size of the list!
The size of the list is: '3'

Lets peek the top element!
The element that we have peeked is: [3]

Lets pop the top element!
The element that we have poped is: '3'

Lets pop the top element!
The element that we have poped is: '2'

Lets pop the top element!
The element that we have poped is: '1'

The size of the list is...Woah.
The list size is now: '0'
Push more elements!
BUILD SUCCESSFUL (total time: 3 seconds)
public class LinearNode<T> {

    private LinearNode<T> next; //se guarda la referencia del Nodo
    private T element;          //Lista vacia

    public LinearNode()
{
next = null;
element = null;
}
//-----------------------------------------------------------------
// Creates a node storing the specified element.
//-----------------------------------------------------------------
public LinearNode (T elem)
{
next = null;
element = elem;
}
//-----------------------------------------------------------------
// Returns the node that follows this one.
//-----------------------------------------------------------------
public LinearNode<T> getNext()
{
return next;
}
//-----------------------------------------------------------------
// Sets the node that follows this one.
//-----------------------------------------------------------------
public void setNext (LinearNode<T> node)
{
next = node;
}
//-----------------------------------------------------------------
// Returns the element stored in this node.
//-----------------------------------------------------------------
public T getElement()//asigna valor
{
return element;
}

public void setElement(T elem)
{

    element = elem;


}



}

共有1个答案

国仰岳
2023-03-14

这看起来是问题所在:

if (count == 0) 
    {
    System.out.println("Pop operation failed. "+ "The stack is empty.");
    }

    result = top.getElement();  //NPE here perhaps
    top = top.getNext();  
    count--;
    System.out.println("The element that we have poped is :" + result);
    return result;

当您触发count==0时,您不会从函数返回,而是继续处理pop操作。

 类似资料:
  •  KAG 的操作方法说明如下。 Note  这是通常情况下的操作。虽然根据游戏的不同,也会有些功能不开放,不过把这个直接复制粘贴到游戏说明书里也无所谓吧(汗) 基本的操作 「鼠标左键单击」或「滚轮向下滚动」或「确认键」或「空格键」 显示下一段文字、选择选项、按下按钮、选择勾选框等动作 「鼠标右键单击」或「ESC 键」 打开历史记录,或呼叫右键菜单 「↑」「↓」 或 「←」「→」 或 「TAB」「S

  • 本文向大家介绍python conda操作方法,包括了python conda操作方法的使用技巧和注意事项,需要的朋友参考一下 conda 虚拟环境安装 List item conda env list #查看已安装虚拟环境 coda创建虚拟环境非常方便:官方教程:https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-e

  • 本文向大家介绍java<<、>>、>>>移位操作方法,包括了java<<、>>、>>>移位操作方法的使用技巧和注意事项,需要的朋友参考一下 <<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。 以上是正整数,运算结果如下。 接下来看看将负数进行左移2位操作是什么情况,运算结果如下。 为什么会-10的二进制会出现这么多的1呢?仔细数一下刚好有32位。首先需要了解的是Java负数存储是

  • 本文向大家介绍python操作redis的方法,包括了python操作redis的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python操作redis的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 删除:可以删除任意数量的项,只需指定两个参数:删除的第一项的位置和要删除的项数。 插入:可以向指定位置插入任意数量的项,只需提供3个参数:起始位置、0(要删除的项数)和要插入的项。 替换:可以向指定位置插入任意数量的项,同时删除任意数量的项,只需指定3个参数:起始位置、要删除的项数和要插入的任意数量的项。 splice()

  • 本文向大家介绍Java操作Mysql的方法,包括了Java操作Mysql的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java操作Mysql的方法。分享给大家供大家参考。具体分析如下: 不同于C#操纵数据库的千篇一律,如果是要Java把操纵数据库的语句分为两种: 一种是有结果的select语句,还有一种是没结果的insert into,update,delete等语句 1.如果是有