C#变量已使用但从未分配

时间:2018-12-19 19:54:36

标签: c#

所以我一直在研究一个程序,该程序计算与输入的数字最接近的三次方幂(如果输入的数字为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();
    }
 }
}

谢谢您的回答。

2 个答案:

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