C#开发计算器时修改while循环内restart变量出现作用域报错如何解决
错误原因
你在Main方法外层已经声明了名为restart的布尔变量,C#语法不允许在嵌套的局部作用域(也就是你写的if/else代码块)中再次声明同名的局部变量。你在每个分支里写bool restart = Convert.ToBoolean(Console.ReadLine());属于重复声明同名变量,不是修改外层已有的restart值,因此触发报错。
修复方法
把所有if/else分支里restart赋值语句前的bool类型声明去掉即可,直接修改外层已经声明的restart变量:
public class Program { public static void Main() { bool restart = true; while (restart == true) { Console.WriteLine("please enter Multiply, Divide, Add Or Subtract"); string Method = Console.ReadLine(); if (Method == "Add") { Console.WriteLine("Please Enter First Number"); double numberOne = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Please Enter The Second Number"); double numberTwo = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(numberOne + numberTwo); Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)"); // 去掉前面的bool声明,直接赋值 restart = Convert.ToBoolean(Console.ReadLine()); } else if (Method == "Subtract") { Console.WriteLine("Please Enter First Number"); double numberOne = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Please Enter The Second Number"); double numberTwo = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(numberOne - numberTwo); Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)"); restart = Convert.ToBoolean(Console.ReadLine()); } else if (Method == "Multiply") { Console.WriteLine("Please Enter First Number"); double numberOne = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Please Enter The Second Number"); double numberTwo = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(numberOne * numberTwo); Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)"); restart = Convert.ToBoolean(Console.ReadLine()); } else if (Method == "Divide") { Console.WriteLine("Please Enter First Number"); double numberOne = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Please Enter The Second Number"); double numberTwo = Convert.ToDouble(Console.ReadLine()); Console.WriteLine(numberOne / numberTwo); Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)"); restart = Convert.ToBoolean(Console.ReadLine()); } else { Console.WriteLine("error found"); Console.WriteLine("Would You Like To Use The Calculator Again? (true = yes, false = no)"); restart = Convert.ToBoolean(Console.ReadLine()); } } } }
可选优化
你可以把询问是否重启的逻辑从每个分支里抽出来,放在while循环末尾,不用每个分支都写一遍重复代码,减少冗余。
内容的提问来源于stack exchange,提问作者Ethan O
相关产品推荐
相关产品推荐

