C# 变量已使用但从未赋值

所以我一直在研究一个程序,它计算输入的数字的最接近和更大的 3 次方(如果输入的数字是 20,那么结果是 27,因为 3^3=27)。但是由于我缺乏技能,我偶然发现了一个问题。似乎使用了变量 result 但从未分配过(即使它的值在 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();

    }

 }

}


一只萌萌小番薯
浏览 363回答 2
2回答

呼啦一阵风

评论可能已经解决了您的问题(您在创建它时没有设置值result,编译器可以预见没有循环运行并且永远没有任何赋值的场景,但您总是使用它。“使用未分配局部变量”错误),但我想指出您的程序距离解决广告中的问题还有一段距离,即找到比输入数字更大的 int 立方体为了解决这个问题,将输入的数字立方根,将其四舍五入到下一个整数并将其立方Math.Pow(Math.Ceiling(Math.Pow(num, 1.0/3.0)), 3.0);就目前的情况而言,我不确定您要通过循环实现什么目标,并且看起来它将运行多次将结果设置为 0(它循环直到 i 为零,结果为 0) . 也许您打算从 2 开始 i 并递增 i 直到结果大于 num,但这似乎比直接执行 calc 效率低

RISEBY

良好编程实践的一个总体规则是在声明中初始化一个变量。编译器错误表示您在result未分配时正在使用它。那是因为在您的情况下,for loop您无法预测它会至少迭代一次(因此在某些情况下,变量在没有被分配的情况下被使用)。如前所述,这可以通过初始化变量来解决(0 是标准)int result = 0;
打开App,查看更多内容
随时随地看视频慕课网APP