我还是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;
}
}
答案 0 :(得分:2)
stack
似乎是一个元素类型的数组,push(int)
告诉我的是int
。int
?setCount
似乎是maxCapacity
构造函数中的GeneralStack(int)
。由于您在isEmpty()
条件后出现意外分号,因此if
方法将无法正常运行。 if (count == 0) ;
表示'如果count
等于零,则不执行任何操作。您可能打算:
if (count == 0) {
isEmpty = true;
}
事实上,整个方法可以简化为单一陈述。
isFull()
,具有类似的缩写形式。您在范围内也没有maxCapacity
变量...也许您忘记声明并初始化字段?pop()
如果声明为void
,则不应返回任何内容。此外,count = count - 1
可以使用减量运算符 --
缩短,例如--count;
。top()
的意思是什么(根据pop()
的代码判断),你不小心命名为topVal()
。此外,您永远不会在方法范围中声明topVal
变量。您可以通过直接从数组中返回元素来重写方法以完全不需要变量。答案 1 :(得分:1)
我哪里出错?
top()
(我猜你的意思是topVal()
)。push
返回pop
的参数相同的类型。您的push
函数接受整数,但pop
函数无效。push
函数中,您说“不确定如何为堆栈赋值”,您应该说stack[count] = value
。这些事情应该让您开始寻找可行的解决方案。可能还有其他一些事情需要改变,但这些至少是你在这里犯下的一些基本错误。
答案 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;
}
}