C# 打印计算结果

C# 打印计算结果,c#,C#,我正在尝试编写一个打印函数,它可以帮助我打印加法、减法等的结果。 我曾尝试在switch-case语句中这样做,但它似乎不起作用。 有没有更简单的方法来实现这个print()函数? 其次,在异常的情况下,如果某个操作抛出异常,我如何管理异常。比如3/0 对于这个程序,我有一个计算器类和一个程序,所有这些都将被测试 public class Calculator { public double Add(double x, double y) { return x +

我正在尝试编写一个打印函数,它可以帮助我打印加法、减法等的结果。 我曾尝试在switch-case语句中这样做,但它似乎不起作用。 有没有更简单的方法来实现这个print()函数? 其次,在异常的情况下,如果某个操作抛出异常,我如何管理异常。比如3/0

对于这个程序,我有一个计算器类和一个程序,所有这些都将被测试

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();