-3

かなり単純なアイデアですが、なぜうまくいかないのかわかりません。Stack b = new Stack(5); を呼び出すとエラーが発生します。メインで。

メインはこちら

public class Test {

public static void main(String[] args) {
 Stack b = new Stack(5);
  b.push('a');
  b.push('b');
  b.push('c');
  b.printStack();

 }
 }

これが私のスタッククラスです

public class Stack {
 char[] stack;
 int items;

 public Stack(int size) {
 stack = char[size];
 items = 0;

 }

 public void push (char add){
   if (items == stack.length) {
   System.out.println("Stack is full");
  }
   else {
  stack[items] = add;
  }
 }


   public void printStack() {
  if (items == 0)
   return;
   else {
   for (int i = 0; i < items; i++)
  System.out.println(i);
  }
  }
   }
4

4 に答える 4

2

1つのことは次のとおりです。

   public Stack(int size) {
     stack = new char[size];
        //^^^you missed new
     items = 0;
   }

その間

 stack[items] = add; //should also increment items 
于 2013-06-17T18:06:31.747 に答える
1

アレイを新しくする必要があります。

あなたのプッシュがアイテム数を増やしていないことがわかります。スタックにプッシュするときは、カウントもインクリメントする必要があります。

于 2013-06-17T18:06:27.950 に答える
0

あなたのコンストラクターの使用で

 stack = new char[size];
于 2013-06-17T18:06:06.403 に答える
0

コンストラクターで配列をnew作成するときにキーワードを使用していません。stack

さらに、push()メソッドはインクリメントしないため、配列itemsの最初の要素を常に上書きします。stack

最後に、printStack()メソッドは期待どおりに機能しません。むしろ、 number までの増分数字を出力します5。機能させるには、print ステートメントを変更する必要があります。

System.out.println(stack[i]);
于 2013-06-17T18:06:23.173 に答える