如何利用字符串与Console.ReadLine()创建指定名称的银行账户对象?
问题分析与解决方案
嘿,我一眼就瞅出你代码里的两个核心问题啦,这就是程序没法识别你输入名称的原因:
1. 变量命名冲突
你在同一个代码块里先定义了string name,紧接着又用name作为账户对象的变量名(比如Savingacc name;),这在C#里绝对行不通——同一个作用域下不能有同名变量,编译器直接就懵了,根本没法正确处理你输入的名称。
2. 没有将输入的名称传递给账户对象
你创建Savingacc和Currentacc实例的时候,用的是无参构造函数new Savingacc(),但完全没把用户输入的name传进去,账户对象根本没拿到你输入的名称呀!
修正后的完整代码示例
首先,咱们得给账户类添加带名称参数的构造函数,确保能接收并存储用户输入的名称:
// 定义储蓄账户类,添加构造函数和Name属性 public class Savingacc { public string Name { get; set; } // 带名称参数的构造函数 public Savingacc(string accountName) { Name = accountName; } public void mainmenu() { // 这里可以使用Name属性,比如打印欢迎信息 Console.WriteLine($"欢迎,{Name}!这是你的储蓄账户菜单"); // 其他菜单逻辑... } } // 同理定义活期账户类 public class Currentacc { public string Name { get; set; } public Currentacc(string accountName) { Name = accountName; } public void mainmenu() { Console.WriteLine($"欢迎,{Name}!这是你的活期账户菜单"); // 其他菜单逻辑... } } // 修改后的Main方法 class Program { static void Main() { Console.WriteLine("Enter 's' if you want a savings account. Enter 'c' if you want current account."); string which = Console.ReadLine(); if (which == "s") { Console.WriteLine("Enter Name"); string name = Console.ReadLine(); // 换个变量名避免冲突,同时把名称传入构造函数 Savingacc savingsAcc = new Savingacc(name); savingsAcc.mainmenu(); } else if (which == "c") { Console.WriteLine("Enter Name"); string name = Console.ReadLine(); // 同样换变量名+传递名称参数 Currentacc currentAcc = new Currentacc(name); currentAcc.mainmenu(); } else { Console.WriteLine("输入无效,请输入's'或'c'"); } } }
关键修改点说明
- 给
Savingacc和Currentacc类加了带名称参数的构造函数,创建对象时就能把用户输入的名称传递进去,存在类的Name属性里。 - 把账户对象的变量名改成了
savingsAcc和currentAcc,彻底避免了和输入的string name重名的问题。 - 在
mainmenu方法里可以直接调用Name属性,这样就能正常显示用户输入的名称啦。
这样改完之后,程序就能正确接收你输入的名称,并传递给对应的账户对象,完美解决你的问题~
内容的提问来源于stack exchange,提问作者user9715543
相关产品推荐
相关产品推荐

