Java 如何通过System.out.println在控制台上不显示任何内容?

Java 如何通过System.out.println在控制台上不显示任何内容?,java,stack,Java,Stack,这里有一个关于StackOverflow上的Stack的问题 我的问题可能看起来很模糊,但如果你检查我写的程序,你可能会明白我想问什么。 我自己实现了这个堆栈。我为用户提供了3种选择。按下、弹出并查看堆栈。当调用view(display)方法时,将显示一堆0,而不是零。我们知道堆栈中没有任何内容,除非我们在其上添加了一些内容。但由于我实现的堆栈是使用数组的整数堆栈,因此调用display方法时会显示一堆0(数组中整数的默认值)。如何显示0而不是0。我知道我可以为空白字符添加ASCII码,但我认为

这里有一个关于StackOverflow上的Stack的问题

我的问题可能看起来很模糊,但如果你检查我写的程序,你可能会明白我想问什么。 我自己实现了这个堆栈。我为用户提供了3种选择。按下、弹出并查看堆栈。当调用view(display)方法时,将显示一堆0,而不是零。我们知道堆栈中没有任何内容,除非我们在其上添加了一些内容。但由于我实现的堆栈是使用数组的整数堆栈,因此调用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]);
            }
    }

}
import java.util.Scanner;
公共类StackClass
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
int-choice=0;
int-push;
堆栈=新堆栈();
做
{
System.out.println(“请选择堆栈操作:\n1.按1添加到堆栈\n2.按2从堆栈中删除元素\n3.查看堆栈”);
choice=input.nextInt();
开关(选择)
{
案例1:
System.out.println(“请输入要存储到堆栈中的数字”);
push=input.nextInt();
栈.推(推);
案例2:
stack.pop();
案例3:
stack.display();
}
}
而((choice==1)| |(choice==2)| |(choice==3));
}    
}
类堆栈
{
私有整数大小;
private int[]stackPlaces=新int[15];
私有int-stackIndex;
堆栈()
{
这个。大小=0;
这个.stackIndex=0;
}
公共无效推送(内部推送)
{
如果(size在
display()
中,只需将循环更改为使用
size
作为循环条件,以便显示元素的逻辑数量:

for (int i=0;i < size; i++)
{
    System.out.println(stackPlaces[i]);
}
for(int i=0;i
请注意,现有循环也仅显示15个值中的14个…

display()
中,只需将循环更改为使用
size
作为循环条件,即可显示元素的逻辑数量:

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

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

而不是
for(int i=0;i而不是
for(int i=0;i您初始化了一个大小为15的int-s数组。int数据类型默认为0(与其默认为null的包装类Integer相反),所以你真正要做的是创建一个15个0的int数组。所以,当你循环数组并打印它的内容时,你会得到15个0


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

初始化一个大小为15的int-s数组。int数据类型默认为0(与其包装类Integer默认为null相反),所以你真正要做的是创建一个15个0的int数组。所以,当你循环数组并打印它的内容时,你会得到15个0


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

比我强-但你当然做到了,毕竟你是Jon Skeet;-)比我强-但你当然做到了,毕竟你是Jon Skeet。;-)旁注:您似乎有两个完全相同的变量。
size
stackIndex
。为了清晰起见,我建议删除其中一个。是的,您是对的。我最初声明在getSize()方法中使用,未实现,未能删除该数据成员。感谢您指出。旁注:您似乎有两个完全相同的变量。
size
stackIndex
。为了清晰起见,我建议丢失其中一个。是的,您是对的。我最初声明在getSize()方法中使用,未实现,未能删除该数据成员。感谢您指出。