对不起,我对编程世界完全陌生。我正在创建一个控制台应用程序,基本上可以输入您是否要将摄氏温度转换为华氏温度,反之亦然。
我遇到的问题是:
"错误3名为' choice'的局部变量不能在此声明 范围,因为它会给“选择”提供不同的含义,即 已经在父母或当前使用过的'范围表示别的东西"
我试着看其他例子,但它们远比我大脑现在理解的复杂得多。
namespace TemperatureApp
{
class Program
{
static void Main(string[] args)
{
int choice;
do
{
Console.WriteLine("Hi! This is a temperatue app");
Console.WriteLine("Press 1 for C to F or 2 for F to C");
//take the user input
int choice = Convert.ToInt32(Console.ReadLine());
if (choice == 1)
{
Console.WriteLine("Great, you chose C to F. Now enter the temp.");
int celcius = Convert.ToInt32(Console.ReadLine());
//next line use the formula and show answer
}
if (choice == 2)
{
Console.WriteLine("Great, you chose F to C. Now enter the temp.");
int fahrenheit = Convert.ToInt32(Console.ReadLine());
//next line use the formula and show answer
}
else
Console.WriteLine("That is not the right choice.");
//In this way, keep asking the person for either 1 or two
}
while (choice != 1 || choice != 2);
Console.ReadLine();
}
}
}
答案 0 :(得分:6)
int choice = Convert.ToInt32(Console.ReadLine());
应该阅读
choice = Convert.ToInt32(Console.ReadLine());
通过第二次放置int
,您将在{}内声明另一个名为“choice”的变量。这个定义与外面的定义相冲突。
答案 1 :(得分:1)
全部在错误消息中,您已在同一范围内两次声明选择变量。
当您从控制台输入中读取值时,您无需重新声明您只需设置它的变量。详细说明:
int choice; // declare variable
do
{
int choice = ...; // re-declare variable
}
在第二行,你想为变量分配一个值,而不是重新声明它,为此你只需要替换这一行:
int choice = ...
使用
choice = ...
答案 2 :(得分:1)
我遇到的问题是:
“名为'choice'的局部变量不能在此范围内声明,因为它会给'choice'赋予不同的含义,'choice'已在'parent或current'范围内用于表示其他内容。”
我试着看其他例子
您不应该查看示例,而是查看错误和代码。 C#编译器的消息对用户非常友好,而且这一点也非常清楚。你只需要理解使用的语言。
无法声明名为“choice”的局部变量
你声明了一个这样的变量:variable-type variable-name
,它发生在错误行上,在你的do
循环中:
int choice = Convert.ToInt32(Console.ReadLine());
此处使用int
您声明变量,int
是其类型。删除int
会使该行成为assignment,这正是您所需要的。 Convert.ToInt32(Console.ReadLine())
的结果被赋予(=)choice
- 变量。您只能在声明变量后指定变量,但您已在代码中更早地完成了变量。所以错误说:
因为它会给'选择'赋予不同的含义,'选择'已在'父或当前'范围内用于表示其他内容
如果你查看代码,你会发现在parent scope(在static void Main()
中)声明了一个具有相同名称的变量:
int choice;
现在您应该知道您只需要声明一次变量,并且通常最好在尽可能小的范围内完成。在您的情况下,您只需删除int
之前的int choice = Convert.ToInt32(Console.ReadLine());
,因为您还需要在choice
循环之外访问do
。
答案 3 :(得分:0)
尝试从您的循环范围中选择变量声明。像这样:
int choice;
do
{
Console.WriteLine("Hi! This is a temperatue app");
Console.WriteLine("Press 1 for C to F or 2 for F to C");
//take the user input
choice = Convert.ToInt32(Console.ReadLine());
if (choice == 1)
{
Console.WriteLine("Great, you chose C to F. Now enter the temp.");
int celcius = Convert.ToInt32(Console.ReadLine());
//next line use the formula and show answer
}
if (choice == 2)
{
Console.WriteLine("Great, you chose F to C. Now enter the temp.");
int fahrenheit = Convert.ToInt32(Console.ReadLine());
//next line use the formula and show answer
}
else
Console.WriteLine("That is not the right choice.");
//In this way, keep asking the person for either 1 or two
}
while (choice != 1 || choice != 2);
Console.ReadLine();
}
}
答案 4 :(得分:0)
您不能拥有与另一个本地变量同名的局部变量。 可以具有一个局部变量,其名称与较大的非本地范围(例如,类成员)的变量同名,但在这种情况下,局部变量会隐藏较大范围的变量。
您要做的是从第int
开始choice
。你不需要重新声明它,你只想分配它。
choice = Convert.ToInt32(Console.ReadLine());