嗨!我刚刚开始使用方法,但是当涉及到数学方法时,我有点困惑。第一篇文章很好:)我很清楚我在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;
}
}
答案 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()
对数字进行平方。不需要用火箭筒杀死苍蝇!