如何编写一个以整数作为参数并计算并返回平方值的函数

时间:2017-10-09 22:56:22

标签: c#

嗨!我刚刚开始使用方法,但是当涉及到数学方法时,我有点困惑。第一篇文章很好:)我很清楚我在NumberToSquare中出过多次了! 编写一个程序,要求用户输入一个数字。在你的程序中编写一个名为SquareValue的函数,它接受一个整数参数并计算整数参数的平方并返回这个平方值。您的程序应该使用此返回的平方值并显示它。输出的一个例子是: 请输入一个数字到正方形:8 / 8平方是:64

到目前为止我所知道的并不是那么易于理解。我想到了几个不同的途径,并不确定要删除什么。请帮助。

namespace SquareValue
{
    class Program
    {
        static void Main(string[] args)
        {

            int number=NumberToSquare();
            SquareValue(NumberToSquare * NumberToSquare);
            string output;

            Console.ReadKey();
        }

        public int SquareValue(NumberToSquare, NumberToSquare);
        {
            int result = NumberToSquare * NumberToSquare;

            return result;
            Console.WriteLine("{0} squared is "+result");
    }

        public int NumberToSquare()
    {
        Console.WriteLine("Please enter a number to square: ");
        int NumberToSquare = Console.ReadLine();
        return NumberToSquare;
    }

}

4 个答案:

答案 0 :(得分:2)

我认为没有理由过分复杂化:

public int Square(int x)
{
  return (x * x);
}

public int Square(int x)
{
   return Math.Pow(x,2);
}

或者只使用Math.Pow,因为它存在2作为数字的幂。

答案 1 :(得分:1)

你在编程方面似乎非常环保,我不确定这是一个学习基础知识的地方,但我会完成你所做的并解释出现了什么问题。

您的原始程序概念很好,但基本语法存在许多问题。我理解你可能不熟悉阅读编译器错误,所以我将解释我看到的只是阅读代码的错误......

你放了一个;在SquareValue(..., ...)方法结束时,该方法宣布了声明,因此括号中的主体不是方法的一部分,之后事情就会变得混乱。

您没有传递从NumberToSquare方法中捕获的值......

int number=NumberToSquare();
SquareValue(NumberToSquare * NumberToSquare);

NumberToSquare不是已定义的变量,因此NumberToSquare * NumberToSquare无法计算,您想要的是number * number,其中`number是用户输入的值。

您对int SquareValue(NumberToSquare, NumberToSquare)的定义需要两个参数,尽管您尚未编写类型。它应该是

int SquareValue(int NumberToSquare, int NumberToSquare)

但你有两次声明的相同变量,这是另一个错误,然后你还没有传递两个参数。您想要自己乘以一个数字,因此您只有一个源数,那么为什么要声明两个参数?您需要一个参数方法

int SquareValue(int NumberToSquare)

并像这样打电话

int number=NumberToSquare();
SquareValue(number);

现在SquareValue()方法返回int,但您从未在调用代码中捕获它并在方法中显示结果。按照此应用程序中的想法,Main方法将执行所有编排和显示,但SquareValue()方法应该只进行计算而不是任何I / O.我还将NumberToSquare()方法重命名为实际发生的内容... GetNumberToSquareFromUser()

在结束时,还有一个“迷路”。

Console.WriteLine("{0} squared is " + result");

你定义了一个从未使用过的字符串输出变量。 并且您的方法需要是静态的,因为main(..)是静态方法,而不是实例。如果你声明一个Squaring类并实例化它,那么你可以从中调用非静态方法。 此外,ReadLine()返回一个无法分配给int的字符串。

最后,结果行在幕后隐式使用String.Format,但您没有指定{0}令牌的原始编号。你也可以使用插值。你可以做其中任何一个

Console.WriteLine("{0} squared is " + result, number);
Console.WriteLine($"{number} squared is " + result);

所以这是你的计划修订

class Program
{
    static void Main(string[] args)
    {

        int number = GetNumberToSquareFromUser();
        int result = SquareValue(number);

        Console.WriteLine("{0} squared is " + result, number);
        Console.ReadKey();
    }

    public static int SquareValue(int numberToSquare)
    {
        return numberToSquare * numberToSquare;
    }

    public static int GetNumberToSquareFromUser()
    {
        Console.WriteLine("Please enter a number to square: ");
        int NumberToSquare = int.Parse(Console.ReadLine());
        return NumberToSquare;
    }

}

我希望这有帮助,我知道这很有用,但我希望你花时间阅读并真正理解,而不是盲目地提交修订版。

答案 2 :(得分:0)

以下是具有强大处理功能的此类程序示例:

using System;

namespace ConsoleApp1
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Enter value to square or X to exit");

                var line = Console.ReadLine();
                if (line == null)
                    continue;

                if (line.Trim().Equals("X", StringComparison.InvariantCultureIgnoreCase))
                {
                    Console.WriteLine("Exitting ...");
                    break;
                }

                int result;

                if (!int.TryParse(line, out result))
                    continue;

                Console.WriteLine(result * result);
            }
        }
    }
}

在网上查看文档,了解每个陈述,然后编写自己的程序,因为您的老师可能会发现您并没有完全自己解决这个问题:)

答案 3 :(得分:0)

编写方法时,请将它们重复使用。当您开始使用方法输出到控制台以及其主要目的(即对数字进行平方)时,其可重用性变得最小。最好在主方法中保留特定代码,并将子任务放入单独的方法中,例如平方数字。现在,无论何时你需要对数字进行平方,你已经有了一个非常好的方法。

我没有处理输入错误输入的用户的情况,但可以在TryParse if块的其他地方完成。

static void Main(string[] args)
{
    int squredNum = 0;
    int NumberToSquare = 0;
    Console.WriteLine("Please enter a number to square: ");
    if(int.TryParse(Console.ReadLine(), out NumberToSquare))
    {
        squredNum = SquareValue(NumberToSquare);
        Console.WriteLine("{0} squared is {1}", NumberToSquare, squredNum);
    }
    Console.ReadKey();
}

static int SquareValue(int numberToSquare)
{
    return numberToSquare * numberToSquare;
}

P.S。我不建议使用Math.Pow()对数字进行平方。不需要用火箭筒杀死苍蝇!