打印计算结果

时间:2018-09-06 16:20:00

标签: c#

我正在尝试编写一个打印功能,该功能将帮助我打印加法,减法等结果。 我已经尝试在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");
        }
    }
}

4 个答案:

答案 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语句。但是我认为主要问题是您没有将xy的值带入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...");
}   

输出

enter image description here

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

别忘了将双精度值转换为字符串,否则会引发错误