我正在尝试编写一个打印功能,该功能将帮助我打印加法,减法等结果。 我已经尝试在switch-case语句中执行此操作,但是它似乎不起作用。 有没有更简单的方法来实现此print()函数? 其次,在发生异常的情况下,例如,如果其中一项操作引发了异常,我该如何管理异常。例如3/0!
对于该程序,我有一个Calculator类和一个Program,将在其中测试所有这些程序。
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;
}
}
}
这是Main
函数
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");
}
}
}
答案 0 :(得分:3)
一些问题,首先,您没有将字符串传递给PrintCalculation(string s)。格式应类似于:
PrintCalculation("Add");
该函数当前已定义。同样在PrintCalculation()中,调用计算函数,然后传递未定义的x和y值。它们不是类或类方法本身的成员。
例如,您尝试在Add(x,y)
内调用PrintCalculation("Add")
,但从未在该函数中给它输入x或y。相反,应该定义功能
public void PrintCalculation(string action, double x, double y){
// code here
}
它应该与
一起调用PrintCalculation("Add", 2, 3);
答案 1 :(得分:1)
代码中存在一些导致编译器错误的问题,例如缺少括号,引号和break语句。但是我认为主要问题是您没有将x
和y
的值带入PrintCalculation
方法中,因此在该方法的主体中未定义它们。>
要解决此问题,您可以像使用其他方法一样将它们添加到参数列表中:
public static void PrintCalculation(string action, double x , double y)
但是请注意,您在此处进行字符串比较,由于区分大小写(如果他们写"add"
而不是"Add"
会发生错误,这很容易出错)。一个不同的选择可能是创建一个enum
来代表有效的动作。这也可以将输入限制为仅我们可以使用的值(以前,用户可能尝试输入"Divide"
,并且什么也没发生时感到困惑):
public enum Action { Add, Subtract, Multiply, Power }
然后可以更改您的方法以容纳枚举而不是字符串。我们也可以使类和方法成为static
,因为不需要状态:
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...");
}
输出
答案 2 :(得分:1)
我认为您可以利用记录操作的优势,而根本不需要切换用例。下面的示例使您可以设置Action<string>
以动态记录结果。
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();
}
答案 3 :(得分:0)
您的问题是:您启动方法来做某事 主要:
myCal.Add(2, 3);
班级:
public double Add(double x, double y)
{
return x + y;
}
但是您不会将结果存储在任何地方。您知道,该方法知道要返回的内容,但另一方面却无法接收任何内容
double i = myCal.Add(2, 3);
或者,您也可以将数字存储在班级中
public double _outcome;
public void Add(double x, double y)
{
_outcome = x + y;
}
和主要
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;
}
}
最后一个问题:您要进行异常处理,首先,您可以通过在方法中添加if语句来检查无效输入来实现此目的,或者您可以采用神圣的做法
try
{
}
catch(Exception ex)
{
}
您可以将代码粘贴到try中,当发生错误而完全停止程序时,将执行catch代码中的代码。如果您愿意,可以使用以下方式打印出例外情况
ex.ToString();
别忘了将双精度值转换为字符串,否则会引发错误