在java中使用静态变量



我尝试打印链表实现的堆栈元素。

但要按堆栈本身的顺序打印,我需要一个java中的静态变量。

public void display()
{
<STATIC> <here I need> LinkedListImp temp = this;
    while(temp.next!=null)
    {
     temp=temp.next;
     display();
     }
    System.out.println("nt"+ temp.element +"n");;
}

但是,在这样声明的同时,我得到了一个错误。

我已经在接口概念中实现了display()。因此,我无法显示(LinkedListImp temp)。

interface StackMethods
{
    int pop();
    void push(int numberint);
    void display();
}

例如,如果堆栈的元素为1,则为2,然后为3。我不希望输出为1 2 3或1(换行)2(换行)3。
相反,我想要作为3(换行符)2(换行符)1(尽管不需要演示真实堆栈)

有没有其他方法可以实现这一点?

如果希望temp的值不依赖于display()的父类(LinkedListImp?)的实例,则需要一个静态类变量。在Java中,static关键字标记属于整个类而不是单个实例的变量。Java中的静态创建了一个也称为"类变量"的变量。根据定义,类变量不能是本地的。要了解更多关于静态变量的信息,请查看文档中的说明,或者查看这个StackOverflow问题,该问题的答案中包含规范。

但看起来您要做的是使用类的实例,这意味着您不需要静态变量。您绝对希望将值绑定到类。

不过,为了使它发挥作用,您需要在while循环中的两个语句周围使用大括号。否则,您将得到一个程序,该程序循环遍历链表的所有元素,并只打印出最后一个元素。这是因为在Java中,如果块语句(ifelseforwhile等)后面没有大括号,则只将下一行视为块的内容。

public void display()
{
    LinkedListImp temp = this;
    while(temp.next!=null)
    {
        System.out.println("nt"+ temp.element +"n");
        temp=temp.next;
    }
}

为了用循环颠倒顺序,我会使用StringBuilder并构建一个字符串。

public void display()
{
    LinkedListImp temp = this;
    StringBuilder result = new StringBuilder();
    while(temp.next!=null)
    {
        result.insert(0, "nt"+ temp.element +"n"); // put the result at the front
        temp=temp.next;
    }
    System.out.println(result.toString());
}

根据您的编辑,您已经向该方法添加了一个递归调用,但对于循环来说这不是必需的。如果您正在执行递归,请删除循环。在这种情况下,递归将作为循环。在这种情况下,只需在调用display后打印出项目,下一个项目用于反向订单,或者之前打印出标准订单。

public display() {
   doDisplay(this);
}
private void doDisplay(LinkedListImpl item) {
    if(item.next) // implicit != null
    {
        doDisplay(item.next);
    }
    System.out.println("nt" + temp.element + "n");  // this line goes before
                                                       // the if statement for
                                                       // regular ordering
}

Java没有像C那样在函数中声明变量为静态的能力。我不明白你为什么认为你需要一个静态变量。。。

static变量的声明与带有static关键字的普通实例变量一样。在方法中声明它们是违法的。此外,为什么不直接使用this而不是将其分配给变量呢?

为了以相反的顺序打印列表,您可以使用一个辅助方法:

public void display() {
    displayHelper(this);
}
private void displayHelper(LinkedListImp temp) {
    if (temp.next != null)
        displayInternal(temp.next);
    System.out.println("nt"+ temp.element +"n");;
}

递归运行良好。我们甚至不需要helper方法。

public void display()
{
    // Displays in reverse order. For forwards order, do it the other way around.
    if (next != null) { next.display(); }
    System.out.println("nt"+ element +"n");
}

相关内容

  • 没有找到相关文章

最新更新