2014-02-25 84 views
0

我正在尝试使此循环工作,因此它将继续询问数字,直到用户输入999.但是,使用此版本的代码,没有建立说我不能在循环中声明num,因为我在这个范围内赋予它不同的含义。在'while循环'中声明变量,但在循环期间不能更改值

使用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!"); 
+0

只需从第二个'num'前删除'int' – paqogomez

+0

双声明... –

+0

并使用单位变量编号..... – Steve

回答

2

的问题是,你与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; 
+0

虽然我希望它们是相同的东西。 –

+0

请看我的编辑 – aw04

+0

@TomCarter,你想让他们一样吗?我不明白这一点。这似乎表明你希望'num'始终为0. – paqogomez

0

您试图声明2个具有相同名称的不同变量。不要声明第二个,只需使用您已经声明的那个(在第二次使用时取下int)。

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

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

1

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

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

但你不能做到这一点:

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

因为所有的变量都有它自己的范围,如果你在外部范围中定义了一个变量,那么你不能在内部范围内定义一个同名的新变量。所以如果你只是想更新变量的值,你不需要再次声明它,只需使用一个简单的作业。见Compiler Error CS0136这样做更多细节的装备。