C#使用堆栈创建一个简单的计算器
我试图创建一个简单的计算器,使用堆栈的撤销功能。如果有人能告诉我我的代码哪里出错了,那就太棒了。看起来我的一些变量可能没有正确陈述。我从未使用堆栈进行编码。我读过关于它的文章,但我需要代码方面的帮助才能找到正确的方向C#使用堆栈创建一个简单的计算器,c#,C#,我试图创建一个简单的计算器,使用堆栈的撤销功能。如果有人能告诉我我的代码哪里出错了,那就太棒了。看起来我的一些变量可能没有正确陈述。我从未使用堆栈进行编码。我读过关于它的文章,但我需要代码方面的帮助才能找到正确的方向 class Calculator { public Stack<double> result; double total; public void add(double a, double b) { total =
class Calculator
{
public Stack<double> result;
double total;
public void add(double a, double b)
{
total = a + b;
Console.WriteLine("Sum:{0}", total);
result.Push(total);
}
public void sub(double a, double b)
{
total = a - b;
Console.WriteLine("Difference:{0}", total);
result.Push(total);
}
public void mul(double a, double b)
{
total = a * b;
Console.WriteLine("Product:{0} ", total);
result.Push(total);
}
public void div(double a, double b)
{
if (b!=0)
{
total = a / b;
Console.WriteLine("Quotient:{0}", total);
result.Push(total);
}
else
{
Console.WriteLine("Error: Cannot divide by 0");
}
}
double getTotal()
{
return total;
}
void undo()
{
if (result.DefaultIfEmpty())
{
Console.WriteLine("UNDO IS NOT AVAILABLE");
}
result.Pop();
total = result.Pop();
Console.WriteLine("Running total:{0}", total);
}
void clear()
{
while (result.DefaultIfEmpty())
result.Pop();
total = 0;
Console.WriteLine("Running total:{0}", total);
}
int main()
{
Calculator cal;
string line;
while (true)
{
Console.WriteLine("Enter (Clear, Undo, Exit, Expression):");
if (line == "Exit")
break;
else if (line == "Undo")
cal.undo();
else if (line == "Clear")
cal.clear();
else
{
double a, b;
char c;
if (c == '+')
cal.add(a, b);
if (c == '-')
cal.sub(a, b);
if (c == '*')
cal.mul(a, b);
if (c == '/')
cal.div(a, b);
}
}
}
}
类计算器
{
公共堆栈结果;
双倍总数;
公共无效添加(双a、双b)
{
总计=a+b;
WriteLine(“总和:{0}”,总计);
结果:推送(总);
}
公共作废分包(双a、双b)
{
总数=a-b;
WriteLine(“差异:{0}”,总计);
结果:推送(总);
}
公共无效mul(双a、双b)
{
总计=a*b;
WriteLine(“产品:{0}”,总计);
结果:推送(总);
}
公共无效分区(双a、双b)
{
如果(b!=0)
{
总计=a/b;
WriteLine(“商:{0}”,总计);
结果:推送(总);
}
其他的
{
Console.WriteLine(“错误:不能除以0”);
}
}
双getTotal()
{
返回总数;
}
void undo()
{
if(result.DefaultIfEmpty())
{
Console.WriteLine(“撤消不可用”);
}
result.Pop();
total=result.Pop();
WriteLine(“运行总计:{0}”,总计);
}
无效清除()
{
while(result.DefaultIfEmpty())
result.Pop();
总数=0;
WriteLine(“运行总计:{0}”,总计);
}
int main()
{
计算器;
弦线;
while(true)
{
WriteLine(“输入(清除、撤消、退出、表达式):”;
如果(行==“退出”)
打破
否则如果(行==“撤消”)
cal.undo();
否则如果(行==“清除”)
cal.clear();
其他的
{
双a,b;
字符c;
如果(c=='+')
加上(a,b);
如果(c=='-')
cal.sub(a,b);
如果(c=='*')
cal.mul(a,b);
如果(c=='/'))
加州分区(a、b);
}
}
}
}
此代码有几个问题
class Calculator
{
public Stack<double> result = new Stack<double>();
double total;
public void add(double a, double b)
{
total = a + b;
Console.WriteLine("Sum:{0}", total);
result.Push(total);
}
public void sub(double a, double b)
{
total = a - b;
Console.WriteLine("Difference:{0}", total);
result.Push(total);
}
public void mul(double a, double b)
{
total = a * b;
Console.WriteLine("Product:{0} ", total);
result.Push(total);
}
public void div(double a, double b)
{
if (b != 0)
{
total = a / b;
Console.WriteLine("Quotient:{0}", total);
result.Push(total);
}
else
{
Console.WriteLine("Error: Cannot divide by 0");
}
}
double getTotal()
{
return total;
}
void undo()
{
if (result.Count == 0)
{
Console.WriteLine("UNDO IS NOT AVAILABLE");
}
result.Pop();
total = result.Pop();
Console.WriteLine("Running total:{0}", total);
}
void clear()
{
while (result.Count != 0)
result.Pop();
total = 0;
Console.WriteLine("Running total:{0}", total);
}
static int Main()
{
Calculator cal = new Calculator();
string line = "";
while (true)
{
Console.WriteLine("Enter (Clear, Undo, Exit, Expression):");
line = Console.ReadLine();
if (line.ToLower() == "exit")
break;
else if (line.ToLower() == "undo")
cal.undo();
else if (line.ToLower() == "clear")
cal.clear();
else
{
double a, b;
char c;
Console.WriteLine("Write the first number");
double.TryParse(Console.ReadLine(), out a);
Console.WriteLine("Write the second number");
double.TryParse(Console.ReadLine(), out b);
Console.WriteLine("Write the operand (+,-,/,*)");
char.TryParse(Console.ReadLine(), out c);
if (c == '+')
cal.add(a, b);
if (c == '-')
cal.sub(a, b);
if (c == '*')
cal.mul(a, b);
if (c == '/')
cal.div(a, b);
}
}
return 0;
}
}
类计算器
{
公共堆栈结果=新堆栈();
双倍总数;
公共无效添加(双a、双b)
{
总计=a+b;
WriteLine(“总和:{0}”,总计);
结果:推送(总);
}
公共作废分包(双a、双b)
{
总数=a-b;
WriteLine(“差异:{0}”,总计);
结果:推送(总);
}
公共空心骡(双a,双b)
{
总计=a*b;
WriteLine(“产品:{0}”,总计);
结果:推送(总);
}
公共无效分区(双a、双b)
{
如果(b!=0)
{
总计=a/b;
WriteLine(“商:{0}”,总计);
结果:推送(总);
}
其他的
{
Console.WriteLine(“错误:不能除以0”);
}
}
双getTotal()
{
返回总数;
}
void undo()
{
如果(result.Count==0)
{
Console.WriteLine(“撤消不可用”);
}
result.Pop();
total=result.Pop();
WriteLine(“运行总计:{0}”,总计);
}
无效清除()
{
while(result.Count!=0)
result.Pop();
总数=0;
WriteLine(“运行总计:{0}”,总计);
}
静态int Main()
{
Calculator cal=新计算器();
字符串行=”;
while(true)
{
WriteLine(“输入(清除、撤消、退出、表达式):”;
line=Console.ReadLine();
if(line.ToLower()=“退出”)
打破
else if(line.ToLower()=“撤消”)
cal.undo();
else if(line.ToLower()=“清除”)
cal.clear();
其他的
{
双a,b;
字符c;
Console.WriteLine(“写第一个数字”);
double.TryParse(Console.ReadLine(),out a);
Console.WriteLine(“写第二个数字”);
double.TryParse(Console.ReadLine(),out b);
WriteLine(“写入操作数(+、-、/、*)”;
TryParse(Console.ReadLine(),out c);
如果(c=='+')
加上(a,b);
如果(c=='-')
cal.sub(a,b);
如果(c=='*')
cal.mul(a,b);
如果(c=='/'))
加州分区(a、b);
}
}
返回0;
}
}
您对此进行了调试吗?请参阅:“Main必须是静态的,并且必须返回一个值”这是错误的,您可以使用void Main。如果我想添加发起者、纪念品和管理员设计。代码会有很大不同吗