0

这是关于 StackOverflow 上的 Stack 的问题。

我的问题可能看起来非常模糊,但是如果您检查我编写的程序,那么您可能会理解我要问的内容。我自己实现了堆栈。我向用户展示了 3 个选择。推送、弹出和查看堆栈。当调用 view(display) 方法时,会显示一堆 0 而不是什么也没有。我们知道堆栈不包含任何内容,除非我们在上面放一些东西。但是由于我实现的堆栈是使用数组的整数堆栈,因此调用显示方法时会显示一堆 0(数组中整数的默认值)。我如何不显示任何内容而不是 0。我知道我可以为空白字符添加 ASCII,但我认为它仍然会违反堆栈规则(没有元素时堆栈应该为空,甚至没有空格代码)。

这是我的程序:

import java.util.Scanner;
public class StackClass
  {

public static void main(String []args)
{

    Scanner input=new Scanner(System.in);
    int choice=0;
    int push;
    Stack stack=new Stack();

    do
    {
        System.out.println("Please select a stack operation:\n1. Press 1 for adding to stack\n2. Press 2 for removing elements from stack\n3. View the stack");
        choice=input.nextInt();

        switch(choice)
            {
                case 1:
                        System.out.println("Please enter the number that you want to store to stack");
                        push=input.nextInt();
                        stack.push(push);

                case 2:
                        stack.pop();
                case 3:
                        stack.display();
            }



    }
    while((choice==1)||(choice==2)||(choice==3));

}    
}
class Stack

{

    private int size;
    private int[] stackPlaces=new int[15];
    private int stackIndex;

    Stack()
    {
        this.size=0;
        this.stackIndex=0;
    }

    public void push(int push)
    {
        if(size<15)
        {
            stackPlaces[stackIndex]=push;
            size++;
            stackIndex++;
        }
        else
        {
            System.out.println("The stack is already full. Pop some elements and then try again");
        }
    }
    public void pop()
    {
        if(size==0)
        {
        System.out.println("The stack is already empty");
        }
        else
        {
        stackPlaces[stackIndex]=0;
        size--;
        stackIndex--;
        }
    }
    public void display()
    {
        System.out.println("The stack contains:");
        for(int i=0;i<stackPlaces.length-1;i++)
            {
            System.out.println(stackPlaces[i]);
            }
    }

}
4

3 回答 3

2

display()中,只需将循环更改size为用于循环条件,以便显示元素的逻辑数量:

for (int i=0;i < size; i++)
{
    System.out.println(stackPlaces[i]);
}

请注意,您现有的循环也只显示了 15 个值中的 14 个......

于 2012-10-23T14:01:20.343 回答
1

您初始化一个大小为 15 的 int-s 数组。 int 数据类型默认为 0(与其默认为 null 的包装类 Integer 不同),因此您真正要做的是创建一个包含 15 个 0 的 int 数组。因此,当您遍历数组并打印其内容时,您将得到 15 个 0。

正如其他人所暗示的那样,解决方案是将循环限制交换为堆栈的大小(实际添加的元素数量),而不是数组的大小。

于 2012-10-23T14:03:09.070 回答
0

而不是for(int i=0;i<stackPlaces.length-1;i++),做for(int i=0;i<stackIndex;i++)

于 2012-10-23T14:01:40.520 回答