所以我一直在研究一个程序,该程序计算与输入的数字最接近的三次方幂(如果输入的数字为20,则结果为27,因为3 ^ 3 = 27)。但是由于我缺乏技能,我偶然发现了一个问题。似乎使用了可变结果但从未分配过(即使在for循环中将其值赋值了),这是代码:
namespace ConsoleApp6
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a number: ");
int num = Convert.ToInt32(Console.ReadLine());
int result;
for(int i = num; (i * i * i) >= 0; i--)
{
result = i * i * i;
}
Console.WriteLine("Nest 3rd pow. is: " + result);
Console.WriteLine("Press any key to contiunue...");
Console.ReadLine();
}
}
}
谢谢您的回答。
答案 0 :(得分:2)
注释可能已经解决了您的问题(创建result
时没有设置值,编译器可以预见没有循环运行且永远没有任何赋值的情况,但是您总是使用它。会出现“使用未分配的局部变量”错误),但我想指出的是,您的程序在某种程度上可以解决广告问题,即找到比输入数字大的下一个更大的int多维数据集
要解决此问题,请对输入的数字求根,将其四舍五入为下一个整数,然后对它求立方。
Math.Pow(Math.Ceiling(Math.Pow(num, 1.0/3.0)), 3.0);
就目前情况而言,我不太确定您要通过循环实现什么目标,并且看起来它将运行很多次,但需要将结果设置为0(直到i为零为止,循环直到结果为0是0)。也许您打算将i从2开始并递增i,直到结果大于num,但这似乎比直接执行calc效率低
答案 1 :(得分:0)
良好编程习惯的一个总规则是在声明上初始化变量。
编译器错误表明尚未分配result
时正在使用。这是因为在您的for loop
中,您无法预测它会重复至少一次(因此,在某些情况下将使用变量而不分配变量)。
如前所述,可以通过初始化变量(标准为0)来解决此问题
int result = 0;