java - 不打印堆栈中输入的第一个节点(toString)

标签 java linked-list nodes comparable stack

首先,代码很长,但我只关心 toString 方法。我粘贴了所有内容以防相关。

代码应该检查输入的元素是否小于堆栈顶部的元素。我已经弄清楚了那部分。当我调用 toString 方法来打印保存的输入时,它不会打印添加到堆栈中的第一个节点。但是,它会打印所有剩余的输入。例如,如果用户输入以下内容:

testing
test
te
t

What its currently outputing:
t te test

What it needs to output:
t te test testing

主要:

import java.util.*;

public class Stack {
public static void main(String args[]) {
    int loopInt = 1;
    PyramidStack<String> stringStack = new PyramidStack<String>();
    PyramidStack<Integer> intStack = new PyramidStack<Integer>();

    System.out
            .println("This program will save some of the strings you enter. ");
    System.out
            .println("Can you predict which ones will be saved?  (Enter nothing to quit.)");
    Scanner sc = new Scanner(System.in); // Opens Scanner for keyboard input

    try {
        do {
            System.out.print("Enter a String: ");
            String input = sc.nextLine();

            if (input.length() > 0) {

                if (stringStack.size() == 0) {
                    intStack.push(input.length());
                    stringStack.push(input);
                    System.out.println("String Saved");
                }

                else if (input.length() < intStack.peek()) {
                    stringStack.push(input);
                    intStack.push(input.length());
                    System.out.println("String Saved");

                }
                else {
                    System.out.println("String NOT saved. Already saved "
                            + intStack.countBefore(input.length())
                            + " strings that should come before this one.");
                }
            } else {
                System.out.println();
                System.out.println(stringStack.toString());
                System.out.println(intStack.toString());

                loopInt--;
                sc.close();
            }
        } while (loopInt > 0);

    } catch (NullPointerException e) {
        System.out.println("No strings have been entered. Ending the program.");
    }
}
}

金字塔堆栈方法:

import java.util.*;
import java.lang.Comparable;

public class PyramidStack<E extends Comparable<E>> extends Stack<E> {

@Override
public void push(E item) throws IllegalArgumentException {

    if (super.size == 0) {
        super.push(item);

    }
    else if(item.compareTo(super.peek()) <= 0) {

        super.push(item);
    } 
    else {
        System.out.println("String NOT saved. " + countBefore(item) +  " strings that should come before this one.");
    }
}

@Override
public String toString() {
    Node<E> node;
    node = this.top;
    String s = "";

    while(node.getNext() != null){
        s += node.getData() + " ";
        node = node.getNext();
    }    
    return s;
}


public int countBefore(E item) {
    Node<E> node;
    node = this.top;
    int i = 0;

    while(node.getNext() != null){
        if(item.compareTo(super.peek()) <= 0) {
        node = node.getNext();
        }
        else{
        i++;
        node = node.getNext();
        }
    }
    return i;
}
}

Stack 方法和 Node 方法在下面的注释中。

最佳答案

while(node.getNext() != null){ s += node.getData() + ""; 节点=节点.getNext(); }

这是您缺少打印最后一个数据的地方..您正在检查node.getnext()是否为空..因此它会跳过最后一个对象并且不会打印它..您的条件应该是
节点!= null

循环结束后有这个
s += node.getData() -- 这不会给出空指针异常,因为节点不为空..因为它确实检查了 node.getnext()

希望对你有帮助

关于java - 不打印堆栈中输入的第一个节点(toString),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15038728/

相关文章:

java - 节点、队列、出队

java - appcompat primarycolour 实现

c++ - 尝试在给定节点之前删除

c - 链表删除root之后的节点

java - 协助仅使用节点创建 java 链表

python - 在 Python 中使用邻接表构建节点图

google-kubernetes-engine - 如何为 GKE 节点增加 `fs.inotify.max_user_watches`

java - 使用不同端口与 Java 进行 SSH 连接

java - 如何使用纯 JDBC 获取目标表的名称和外键列的列

java - 在 Mac 应用程序中嵌入 Java (.jar) 文件