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 になります (そのラッパー クラス Integer はデフォルトで null になります)。したがって、実際に行っているのは 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 に答える