【问题标题】:Declaring variable within 'while loop' but can't change value during loop在“while 循环”中声明变量,但在循环期间不能更改值
【发布时间】:2014-03-28 12:18:20
【问题描述】:

我正在尝试使这个循环工作,所以它会一直询问一个数字,直到用户输入 999。但是使用这个版本的代码,它不会说我不能在循环中声明 num,因为我在这个范围内赋予它不同的含义。

使用 try 和 catch 是因为我对这段代码的分配规则。

int num;
while (num != 999)
{
    Console.WriteLine("Enter a number between 0 and 99");
    string input = Console.ReadLine();
    try
    {
        int num = Convert.ToInt32(input);
        Console.WriteLine("This is element number " + num + " : " + randNums[num]);
    }
    catch
    {
        Console.WriteLine("Data inputted is not between 0 and 99");
    }
}
Console.WriteLine("You chose the secret value, well done!");

【问题讨论】:

  • 只需删除第二个num前面的int
  • 双重声明...
  • 以及使用未初始化的变量 num.....
  • 在第一行中,num 变量应该在使用之前被初始化为某个值。即使这不是问题,我认为编译器会抱怨

标签: c# variables loops while-loop scope


【解决方案1】:

问题是您使用int num 声明了两次变量。您不需要在循环中重新声明变量,只需分配它:

int num = 0; // initialized num to 0 here
while (num != 999)
{
    Console.WriteLine("Enter a number between 0 and 99");
    string input = Console.ReadLine();
    try
    {
        num = Convert.ToInt32(input); // Changed int num to num here
        Console.WriteLine("This is element number " + num + " : " + randNums[num]);
    }
    catch
    {
        Console.WriteLine("Data inputted is not between 0 and 99");
    }
}
Console.WriteLine("You chose the secret value, well done!");

【讨论】:

    【解决方案2】:

    您在同一范围内定义了两次 int num。更改其中之一的名称。循环内的那个是无效的,因为你已经定义了一个。

    如果您想重新分配相同的变量,也可以从内部删除int。这样它每次都会用一个新值覆盖它。

    另外,当你第一次初始化它时,一定要给它赋值。

    示例:

    int num = 0;
    

    【讨论】:

    • 我希望它们是一样的。
    • @TomCarter,您希望它们相同吗?我不明白。这似乎表明您希望 num 始终为 0。
    • @paqogomez 我认为他的意思是他想在每次循环中重新分配它
    • 这更有意义。 @TomCarter,如果您将 int 放在变量名前面,则您正在重新声明该变量。您不想重新声明,只想从输入中分配值。
    • @Antonio 在 cmets 中提出了一个很好的观点。第一个需要初始设置为 0。
    【解决方案3】:

    除了其他答案,你可以这样做,例如:

    if (someCondition)
    {
         int num = 23;
    }
    else
    {
         int num = 12;
    }
    

    但你不能这样做:

    int num = 12;
    if(someCondition)
    {
       int num = 23;
    }
    

    因为所有变量都有自己的作用域,如果你在外部作用域定义一个变量,你不能在内部作用域定义一个同名的新变量。所以如果你只是想更新你的值变量,你不需要再次声明它,只需使用一个简单的赋值即可。更多详细信息请参阅Compiler Error CS0136 文档。

    【讨论】:

      【解决方案4】:

      您正在尝试声明 2 个不同的同名变量。而不是声明第二个,只需使用您已经声明的那个(在第二个用法中删除int)。

      ...
          try
          {
              num = Convert.ToInt32(input); // <-- Using existing declaration here
              Console.WriteLine("This is element number " + num + " : " + randNums[num]);
          }
      ...
      

      【讨论】:

        【解决方案5】:

        您有两个同名的 int 变量。您需要更改另一个,因为您有一个 int 变量作为输入,它将接受用户分配的数字,另一个 int 变量负责检测输入的数字是否为 999。

        【讨论】:

          猜你喜欢
          • 2011-01-04
          • 1970-01-01
          • 2015-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          • 1970-01-01
          相关资源
          最近更新 更多