C# 打印计算结果
我正在尝试编写一个打印函数,它可以帮助我打印加法、减法等的结果。 我曾尝试在switch-case语句中这样做,但它似乎不起作用。 有没有更简单的方法来实现这个print()函数? 其次,在异常的情况下,如果某个操作抛出异常,我如何管理异常。比如3/0 对于这个程序,我有一个计算器类和一个程序,所有这些都将被测试C# 打印计算结果,c#,C#,我正在尝试编写一个打印函数,它可以帮助我打印加法、减法等的结果。 我曾尝试在switch-case语句中这样做,但它似乎不起作用。 有没有更简单的方法来实现这个print()函数? 其次,在异常的情况下,如果某个操作抛出异常,我如何管理异常。比如3/0 对于这个程序,我有一个计算器类和一个程序,所有这些都将被测试 public class Calculator { public double Add(double x, double y) { return x +
public class Calculator
{
public double Add(double x, double y)
{
return x + y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Power(double x, double y)
{
return Math.Pow(x, y);
}
public void PrintCalculation(string action)
{
switch (action)
{
case "Add":
Console.WriteLine("Sum is: {0}", Add(x, y));
break;
case "Subtract":
Console.WriteLine("Division is: {0}", Subtract(x, y));
break;
case "Multiply":
Console.WriteLine("Multiply is: {0}", Multiply(x, y);
break;
case "Power":
Console.WriteLine("Power is: {0}", Power(x, y);
break;
}
}
}
这是主功能
namespace MyCalculator
{
public class Program : Calculator
{
static void Main()
{
Calculator myCal = new Calculator();
myCal.Add(2, 3);
myCal.Subtract(3, 3);
myCal.Multiply(5, 5);
myCal.Power(2, 3);
myCal.PrintCalculation("Add");
myCal.PrintCalculation("Subtract");
myCal.PrintCalculation("Multiply");
}
}
}
有几个问题,首先您没有将字符串传递到PrintCalculation(字符串s)。格式应类似于:
打印计算(“添加”)代码>
由于函数当前已定义。此外,在printcluation()中调用计算函数,然后将未定义的x和y值传递给计算函数。它们不是类或类方法本身的成员
例如,您试图在打印计算(“添加”)
的内部调用Add(x,y)
,但您从未在该函数中为其指定x或y。相反,应该定义函数
public void PrintCalculation(string action, double x, double y){
// code here
}
它应该被称为
PrintCalculation("Add", 2, 3);
有几个问题,首先您没有将字符串传递到PrintCalculation(字符串s)。格式应类似于:
打印计算(“添加”)代码>
由于函数当前已定义。此外,在printcluation()中调用计算函数,然后将未定义的x和y值传递给计算函数。它们不是类或类方法本身的成员
例如,您试图在打印计算(“添加”)
的内部调用Add(x,y)
,但您从未在该函数中为其指定x或y。相反,应该定义函数
public void PrintCalculation(string action, double x, double y){
// code here
}
它应该被称为
PrintCalculation("Add", 2, 3);
代码中存在一些导致编译器错误的问题,例如缺少括号、引号和break语句。但是我认为主要的问题是你没有把x
和y
的值引入到你的PrintCalculation
方法中,因此它们在该方法的主体中没有定义
要解决此问题,只需将它们添加到参数列表中,就像使用其他方法一样:
public static void PrintCalculation(string action, double x , double y)
但是请注意,您在这里进行的是字符串比较,由于区分大小写,可能会出现错误(如果他们编写“add”
,而不是“add”
?)。另一个选项可能是创建一个enum
,以表示有效的操作。这还用于将允许的输入限制为我们可以使用的值(以前用户可能试图输入“Divide”
,但在什么都没有发生时感到困惑):
然后可以更改方法以适应枚举而不是字符串。我们还可以将类和方法设置为静态的,因为不需要状态:
public static class Calculator
{
public enum Action { Add, Subtract, Multiply, Power }
public static double Add(double x, double y)
{
return x + y;
}
public static double Subtract(double x, double y)
{
return x - y;
}
public static double Multiply(double x, double y)
{
return x * y;
}
public static double Power(double x, double y)
{
return Math.Pow(x, y);
}
public static void PrintCalculation(Action action, double x , double y)
{
switch (action)
{
case Action.Add:
Console.WriteLine("The sum of {0} and {1} is: {2}",
x, y, Add(x, y));
break;
case Action.Subtract:
Console.WriteLine("The difference between {0} and {1} is: {2}",
x, y, Subtract(x, y));
break;
case Action.Multiply:
Console.WriteLine("The product of {0} and {1} is: {2}",
x, y, Multiply(x, y));
break;
case Action.Power:
Console.WriteLine("{0} raised to the power of {1} is: {2}",
x, y, Power(x, y));
break;
}
}
}
通过这些更改,我们现在可以使用如下类:
private static void Main(string[] cmdArgs)
{
var first = 7;
var second = 3;
Calculator.PrintCalculation(Calculator.Action.Add, first, second);
Calculator.PrintCalculation(Calculator.Action.Subtract, first, second);
Calculator.PrintCalculation(Calculator.Action.Multiply, first, second);
Calculator.PrintCalculation(Calculator.Action.Power, first, second);
GetKeyFromUser("\nDone! Press any key to exit...");
}
输出
代码中有一些问题会导致编译器错误,例如缺少括号、引号和break语句。但是我认为主要的问题是你没有把x
和y
的值引入到你的PrintCalculation
方法中,因此它们在该方法的主体中没有定义
要解决此问题,只需将它们添加到参数列表中,就像使用其他方法一样:
public static void PrintCalculation(string action, double x , double y)
但是请注意,您在这里进行的是字符串比较,由于区分大小写,可能会出现错误(如果他们编写“add”
,而不是“add”
?)。另一个选项可能是创建一个enum
,以表示有效的操作。这还用于将允许的输入限制为我们可以使用的值(以前用户可能试图输入“Divide”
,但在什么都没有发生时感到困惑):
然后可以更改方法以适应枚举而不是字符串。我们还可以将类和方法设置为静态的,因为不需要状态:
public static class Calculator
{
public enum Action { Add, Subtract, Multiply, Power }
public static double Add(double x, double y)
{
return x + y;
}
public static double Subtract(double x, double y)
{
return x - y;
}
public static double Multiply(double x, double y)
{
return x * y;
}
public static double Power(double x, double y)
{
return Math.Pow(x, y);
}
public static void PrintCalculation(Action action, double x , double y)
{
switch (action)
{
case Action.Add:
Console.WriteLine("The sum of {0} and {1} is: {2}",
x, y, Add(x, y));
break;
case Action.Subtract:
Console.WriteLine("The difference between {0} and {1} is: {2}",
x, y, Subtract(x, y));
break;
case Action.Multiply:
Console.WriteLine("The product of {0} and {1} is: {2}",
x, y, Multiply(x, y));
break;
case Action.Power:
Console.WriteLine("{0} raised to the power of {1} is: {2}",
x, y, Power(x, y));
break;
}
}
}
通过这些更改,我们现在可以使用如下类:
private static void Main(string[] cmdArgs)
{
var first = 7;
var second = 3;
Calculator.PrintCalculation(Calculator.Action.Add, first, second);
Calculator.PrintCalculation(Calculator.Action.Subtract, first, second);
Calculator.PrintCalculation(Calculator.Action.Multiply, first, second);
Calculator.PrintCalculation(Calculator.Action.Power, first, second);
GetKeyFromUser("\nDone! Press any key to exit...");
}
输出
我认为您可以利用记录操作的优势,而不需要任何开关盒。下面的示例允许您设置操作
,以便动态记录结果
public class Calculator
{
public Action<string> LogAction { get; set;}
private double PerformCalculation(string calculationName, string format, double x, double y, Func<double, double, double> calcFunction)
{
double value = calcFunction(x, y);
LogAction?.Invoke(string.Format(format, x, y, value));
return calcFunction(x, y);
}
public double Add(double x, double y)
{
string format = "The sum of {0} and {1} is: {2}";
return PerformCalculation("Add", format, x, y, (a, b) => a + b);
}
public double Subtract(double x, double y)
{
string format = "The difference between {0} and {1} is: {2}";
return PerformCalculation("Subtract", format, x, y, (a, b) => a - b);
}
public double Multiply(double x, double y)
{
string format = "The product of {0} and {1} is: {2}";
return PerformCalculation("Multiply", format, x, y, (a, b) => a * b);
}
public double Power(double x, double y)
{
string format = "{0} raised to the power of {1} is: {2}";
return PerformCalculation("Power", format, x, y, (a, b) => Math.Pow(a, b));
}
}
static void Main(string[] args)
{
Calculator myCal = new Calculator();
myCal.LogAction = Console.WriteLine; // Sets all calculation output to the console.
myCal.Add(2, 3);
myCal.Subtract(3, 3);
myCal.Multiply(5, 5);
myCal.Power(2, 3);
Console.ReadLine();
}
公共类计算器
{
公共操作日志操作{get;set;}
专用双性能计算(字符串计算名称、字符串格式、双x、双y、Func calcFunction)
{
双值=计算函数(x,y);
LogAction?.Invoke(string.Format(Format,x,y,value));
返回计算函数(x,y);
}
公共双加(双x,双y)
{
string format=“{0}和{1}之和为:{2}”;
返回性能计算(“添加”,格式,x,y,(a,b)=>a+b);
}
公共双减法(双x,双y)
{
string format=“{0}和{1}之间的区别是:{2}”;
返回性能计算(“减法”,格式,x,y,(a,b)=>a-b;
}
公共双乘(双x,双y)
{
string format=“{0}和{1}的乘积为:{2}”;
返回性能计算(“乘法”,格式,x,y,(a,b)=>a*b);
}
公共双电源(双x,双y)
{
string format=“{0}提升到{1}的幂为:{2}”;
返回性能计算(“幂”,格式,x,y,(a,b)=>Math.Pow(a,b));
}
}
静态void Main(字符串[]参数)
{
计算器myCal=新计算器();
myCal.LogAction=Console.WriteLine;//将所有计算输出设置为控制台。
myCal.Add(2,3);
myCal.Subtract(3,3);
myCal.乘法(5,5);
myCal.Power(2,3);
Console.ReadLine();
}
我认为您可以利用记录操作的优势,而不需要任何开关盒。下面的示例允许您
myCal.PrintCalculation(myCal._outcome.ToString());
myCal.TmpNumberOne = 1;
myCal.TmpNumberTwo = 2;
myCal.PrintCalculation("Add");
public double TmpNumberOne;
public double TmpNumberTwo;
public double Add(double x, double y)
{
return x + y;
}
public void PrintCalculation(string action)
{
switch (action)
{
case "Add":
Console.WriteLine("Sum is: {0}", Add(TmpNumberOne, TmpNumberTwo).ToString());
break;
}
}
try
{
}
catch(Exception ex)
{
}
ex.ToString();