我正在尝试编写一个程序,以将该任务弹出并添加到堆栈中的前2个项目。该程序有一个Pop
方法,但是我想知道如何在Add
方法中调用该方法。该Add
应该弹出堆栈中的前两个项目,获取它们的总和,并将该总和推入堆栈。在下面的代码中,我在Pop
方法内两次调用Add
方法,但是当我显示堆栈时,堆栈仍然具有所有原始值。要使Pop
方法起作用,我还需要其他什么吗?
class StackEmptyException : ApplicationException
{
public StackEmptyException(String message) : base(message)
{
}
}
class MathStack
{
private int[] dataStack;
private int size;
private int top = -1;
public bool IsEmpty()
{
return top == -1;
}
public bool IsFull()
{
return top == size - 1;
}
public void Push(int i)
{
dataStack[++top] = i;
}
public int Pop()
{
if (IsEmpty())
throw new StackEmptyException
("Stack empty -- cannot pop");
else
return dataStack[top--];
}
public int Top()
{
if (IsEmpty())
throw new StackEmptyException
("Stack empty -- top undefined");
else
return dataStack[top];
}
public MathStack()
{
dataStack = new int[10];
}
public MathStack(int s)
{
size = 10;
dataStack = new int[size];
}
public void LoadStack(int v)
{
dataStack[++top] = v;
}
public void Display()
{
int[] display = new int[dataStack.Length];
for (int i = 0; i < dataStack.Length; i++)
{
display[i] = dataStack[i];
Console.WriteLine("{0}", display[i]);
}
}
public void Add()
{
int add1 = dataStack[0];
int add2 = dataStack[1];
Pop();
Pop();
int sum = add1 + add2;
Console.WriteLine("Sum: {0}", sum);
}
}
class Program
{
static void Main(string[] args)
{
MathStack stack1 = new MathStack();
stack1.Push(9);
stack1.Push(8);
stack1.Push(7);
stack1.Push(6);
stack1.Push(5);
stack1.Push(4);
stack1.Push(3);
stack1.Push(2);
stack1.Push(1);
stack1.Push(0);
stack1.Display();
stack1.Add();
stack1.Display();
Console.ReadLine();
}
}
答案 0 :(得分:1)
您的代码有两件事。
首先,Display
方法显示整个数组。除非您不是要从阵列中物理移除项目,否则需要在索引top
处停止:
public void Display()
{
if (IsEmpty())
{
Console.WriteLine("Empty");
return;
}
for (int i = 0; i <= top; i++)
{
Console.WriteLine(dataStack[i]);
}
}
第二个问题是您的Add
。据我了解,您想弹出最后两个项目,对它们求和,然后推结果。在您的实现中,您实际上是对前两项进行累加(而不是后两项)。更好的版本是:
public void Add()
{
int add1 = Pop();
int add2 = Pop();
int sum = add1 + add2;
Console.WriteLine("Sum: {0}", sum);
Push(sum);
}
请注意我如何不直接访问dataStack
。如果您的API正确实现,则不需要它。