0

私はまだ Java に不慣れで、オブジェクト配列を使用する汎用スタック キューを作成しようとしています。つまり、配列の宣言と配列の長さの割り当てが間違っていることを知っていました。

誰かが見て、私にいくつかのフィードバックを与えることができますか?

public class GeneralStack
{
    GeneralStack [] stack;  //not sure how to declare this
    private int count;
    private static final int DEFAULT_CAPACITY = 100;

//default constructor
public GeneralStack()
    {
        stack = new int[DEFAULT_CAPACITY];
        count = 0;
    }

//alternate constructor
public GeneralStack (int maxCapacity)
    {
        stack = new int[maxCapacity];
        count = setCount;
    }

//accessor getCount
public int getCount ()
    {
    return count;
    }

//accessor isEmpty
public boolean isEmpty ()
    {
    boolean isEmpty=false;
    if (count == 0);
        {
            isEmpty=true;
        }
    return isEmpty;
    }

//accessor isFull
public boolean isFull ()
    {
    boolean isFull=false;
    if (count == maxCapacity);
        {
        isFull=true;
        }
    return isFull;
    }

//mutator push
public void push (int value)
    {
    if (isFull ())
        {
        throw new IllegalArgumentException("Stack is full");
        }
    else
        {
        stack[value]; //not sure how to assign value to the stack
        count++;
        }
    }

//mutator pop
public void pop ()
    {
         int topVal = top();
        count = count-1;
        return topVal;
    }

//accessor top
public int topVal ()
    {
    if (isEmpty())
        {
        throw new IllegalArgumentException("Stack is empty");
        }
    else 
        {
        topVal=stack[count-1];
        }
    return topVal;
    }
} 
4

3 に答える 3

2
  1. stackは、要素型の配列を意図していたようで、 であることがpush(int)わかりますint
  2. に限定されている一般的なスタックの種類は何intですか?
  3. setCountmaxCapacityコンストラクター内にあることを意図していたようGeneralStack(int)です。
  4. 条件isEmpty()の後に意図しないセミコロンがあるため、メソッドは正しく機能しません。「ゼロの場合は何もしない」という意味です。次のことを意図した可能性があります。ifif (count == 0) ;count

    if (count == 0) {
      isEmpty = true;
    }
    

    実際、メソッド全体を 1 つのステートメントに短縮できます。

  5. #3 の同じ問題はisFull()、同様の短縮形で にも当てはまります。またmaxCapacity、スコープに変数がありません...おそらく、フィールドの宣言と初期化を忘れていませんか?
  6. スタックへの割り当ては、topに対応する配列要素を変更する必要があります。
  7. pop()宣言されている場合、何も返すべきではありませんvoid。さらに、デクリメント演算子,をcount = count - 1使用して短縮できます。----count;
  8. おそらくあなたが名前を付けるつもりだったのはtop()( のコードから判断するとpop())、誤って という名前を付けましtopVal()た。topValさらに、メソッド スコープで変数を宣言することはありません。メソッドを書き直して、配列から要素を直接返すことにより、変数の必要性をまったくなくすことができます。
于 2012-08-07T05:12:13.797 に答える
1

どこで私は間違えましたか?

  1. ここにいくつかのコンパイルエラーがあるように見えます。たとえばtop()、存在しないように見える関数を呼び出します (私はあなたが意味したと思いますtopVal())。
  2. スタックに任意の型を取りたい場合は、ジェネリック型を調べる必要があります。
  3. pushスタックでは、に対して返すパラメータと同じ型を受け入れる必要がありますpop。関数pushは整数を受け入れますが、pop関数は無効です。
  4. データ構造を裏付ける配列は、上記の手順 (2) で使用したものと同じ型である必要があります。現状では、おそらく整数である必要があるように思えますが、ステップ (1) が推奨するように、おそらくジェネリック型の使用を検討してください。
  5. 「スタックに値を割り当てる方法がわからない」pushと言う関数では、 と言う必要があります。stack[count] = value

これらのことにより、実用的なソリューションに向けて始めることができます。おそらく他にも変更する必要があるものがありますが、これらは少なくともここで犯した基本的な間違いの一部です.

于 2012-08-07T05:12:15.233 に答える
-1

arraylistのようなものを使用してください。http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Stack.html 既に実装されているクラスですが、Java を初めて使用する場合に備えてコードを修正しました。 . ロジックをチェックしませんでしたが、構文の修正が役立つことを願っています

    package Temp;

    public class GeneralStack
{
    int[] stack;  //not sure how to declare this
    private int count;
    private int maxCapacity;
    private static final int DEFAULT_CAPACITY = 100;

//default constructor
public GeneralStack()
    {
        stack = new int[DEFAULT_CAPACITY];
        count = 0;
        maxCapacity = this.DEFAULT_CAPACITY;
    }

//alternate constructor
public GeneralStack (int maxCapacity)
    {
        stack = new int[maxCapacity];
        count = 0;
        this.maxCapacity = maxCapacity;
    }

//accessor getCount
public int getCount ()
    {
    return count;
    }

//accessor isEmpty
public boolean isEmpty ()
    {
    boolean isEmpty=false;
    if (count == 0);
        {
            isEmpty=true;
        }
    return isEmpty;
    }

//accessor isFull
public boolean isFull ()
    {
    boolean isFull=false;
    if (count == maxCapacity);
        {
        isFull=true;
        }
    return isFull;
    }

//mutator push
public void push (int value)
    {
    if (isFull ())
        {
        throw new IllegalArgumentException("Stack is full");
        }
    else
        {
        stack[count] = value; //not sure how to assign value to the stack
        count++;
        }
    }

// you cant return value from void function so changing it to int return you can ignore a return value 
public int pop ()
    {
         int topVal = topVal();
        count = count-1;
        return topVal;
    }

//accessor top
public int topVal ()
    {
    int topVal;
    if (isEmpty())
        {
        throw new IllegalArgumentException("Stack is empty");
        }
    else 
        {
        topVal=stack[count-1];
        }
    return topVal;
    }
} 
于 2012-08-07T05:22:13.570 に答える