使用已分配的未分配局部变量

时间:2014-11-12 06:00:45

标签: c# variables if-statement for-loop unassigned-variable

以下代码运行' for'循环创建1到12月,然后根据他们的数字命名每月1月到12月。那件作品很好。在我尝试在屏幕上写月份名称的底部是它失败的地方。它表示"使用未分配的本地变量' monthName&#39 ;;但是,之前使用的是monthName,并在上面声明。您将提供的任何帮助将不胜感激。

for (int month = 1; month <= 12; month++)
{
    string monthName;
    double monthlyProd = .1 * dProdRate;
    double monthlySales = .07 * dSalesRate;
    if (month == 1) { monthName = "Jan"; }
    if (month == 2) { monthName = "Feb"; monthlyProd = 0; }
    if (month == 3) { monthName = "Mar"; }
    if (month == 4) { monthName = "Apr"; }
    if (month == 5) { monthName = "May"; }
    if (month == 6) { monthName = "Jun"; monthlyProd = 0; }
    if (month == 7) { monthName = "Jul"; }
    if (month == 8) { monthName = "Aug"; }
    if (month == 9) { monthName = "Sep"; monthlySales = (.15 * dSalesRate); }
    if (month == 10) { monthName = "Oct"; }
    if (month == 11) { monthName = "Nov"; }
    if (month == 22) { monthName = "Dec"; monthlySales = (.15 * dSalesRate); }
}
dEndingInventory += dPreviousProd - dPreviousSales;
Console.WriteLine("{0}{1,15}{2,15}{3,15}", monthName, monthlyProd, monthlySales, dEndingInventory);

3 个答案:

答案 0 :(得分:2)

你知道month只能取值1到12(包括1和12),但编译器并不聪明。如果说month为0,那么变量monthName永远不会被赋值,这就是编译器所抱怨的。要修复它,只需在声明它时初始化变量:

string monthName = null;

此外,您的代码有些可疑,因为monthName在声明它的循环之外使用但我认为这是一个错字,因为现在的代码不会给您错误询问。

答案 1 :(得分:0)

你肯定会在范围外声明monthName(在你的循环中它再次声明)。另外,程序应该告诉编译错误。右键单击变量然后&#34;转到defenision&#34;。如果这样,变量就不同了。所以只是行为不端

原因是两个变量在主存储器中具有不同的存储器。所以一个内存更新不会影响另一个。编译器将使用最大局部变量进行处理。内部循环其内部声明的一个。在循环之外它是外部的

因此,如果您不需要外部变量值,则不要再在内部声明它。另外,你在循环之外用其他名称声明它

答案 2 :(得分:0)

您已在For循环范围内声明了monthName,monthlyProd,monthlySales,并尝试将这些变量用于For循环范围之外。你应该在for循环之前声明变量 -

string monthName;
double monthlyProd = .1 * dProdRate;
double monthlySales = .07 * dSalesRate;

for (int month = 1; month <= 12; month++)
{

    if (month == 1) { monthName = "Jan"; }
    if (month == 2) { monthName = "Feb"; monthlyProd = 0; }
    if (month == 3) { monthName = "Mar"; }
    if (month == 4) { monthName = "Apr"; }
    if (month == 5) { monthName = "May"; }
    if (month == 6) { monthName = "Jun"; monthlyProd = 0; }
    if (month == 7) { monthName = "Jul"; }
    if (month == 8) { monthName = "Aug"; }
    if (month == 9) { monthName = "Sep"; monthlySales = (.15 * dSalesRate); }
    if (month == 10) { monthName = "Oct"; }
    if (month == 11) { monthName = "Nov"; }
    if (month == 22) { monthName = "Dec"; monthlySales = (.15 * dSalesRate); }
}
dEndingInventory += dPreviousProd - dPreviousSales;
Console.WriteLine("{0}{1,15}{2,15}{3,15}", monthName, monthlyProd, monthlySales, dEndingInventory);