创建一个对象堆栈类 - 我哪里出错了?

时间:2012-08-07 04:51:40

标签: java arrays object

我还是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;
    }
} 

3 个答案:

答案 0 :(得分:2)

  1. stack似乎是一个元素类型的数组,push(int)告诉我的是int
  2. 什么类型的一般堆栈仅限于int
  3. setCount似乎是maxCapacity构造函数中的GeneralStack(int)
  4. 由于您在isEmpty()条件后出现意外分号,因此if方法将无法正常运行。 if (count == 0) ;表示'如果count等于零,则不执行任何操作。您可能打算:

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

    事实上,整个方法可以简化为单一陈述。

  5. #3中的同一问题也适用于isFull(),具有类似的缩写形式。您在范围内也没有maxCapacity变量...也许您忘记声明并初始化字段?
  6. 分配给堆栈应该改变与 top 对应的数组元素。
  7. pop()如果声明为void,则不应返回任何内容。此外,count = count - 1可以使用减量运算符 --缩短,例如--count;
  8. 你的名字top()的意思是什么(根据pop()的代码判断),你不小心命名为topVal()。此外,您永远不会在方法范围中声明topVal变量。您可以通过直接从数组中返回元素来重写方法以完全不需要变量。

答案 1 :(得分:1)

  

我哪里出错?

  1. 在我看来,这里有一些编译错误。例如你调用一个似乎不存在的函数top()(我猜你的意思是topVal())。
  2. 如果您希望您的堆栈采用任何类型,您应该查看Generic Types
  3. 在堆栈中,您需要接受与push返回pop的参数相同的类型。您的push函数接受整数,但pop函数无效。
  4. 支持数据结构的阵列需要与上面步骤(2)中使用的阵列相同。就像现在一样,似乎你可能希望它是一个整数,但正如步骤(1)所建议的那样,或许可以考虑使用泛型类型。
  5. push函数中,您说“不确定如何为堆栈赋值”,您应该说stack[count] = value
  6. 这些事情应该让您开始寻找可行的解决方案。可能还有其他一些事情需要改变,但这些至少是你在这里犯下的一些基本错误。

答案 2 :(得分:-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;
    }
}