C#类内变量改为数组后已输入内容无法正常输出问题求助
问题根因
- 索引自增逻辑错误:
PlayerCharacter构造方法中,你先使用i作为下标完成属性赋值,之后才执行i++。构造完成后i已经指向数组的下一个空位置,调用Output方法时,属性get逻辑读取的是未赋值的数组空位,所以输出为空。 string.Join用法错误:string.Join用于拼接集合的所有元素,你传入的是单个字符串、数字、字符类型的属性值,不需要使用该方法,直接输出属性即可。- 数据存储逻辑错误:角色数组定义在
PlayerCharacter类的实例成员中,每次创建新角色实例都会生成独立的空数组,历史创建的角色数据不会保存在同一个数组内,无法实现多角色存储查看。同时Main方法仅声明了单个角色变量,每次创建新角色都会覆盖之前的实例,历史数据直接丢失。 - 局部变量覆盖问题:View逻辑中声明的局部变量
i、x和角色实例内部的i、x属性无关,修改局部变量不会改变实例的索引取值,遍历逻辑不生效。
修复方案
临时修复(快速看到输出)
修改两处代码即可看到当前创建角色的输出:
- 删掉
PlayerCharacter构造方法最后一行的i++;,保证构造完成后i仍指向刚赋值的数组下标 - 把所有
Output方法中的string.Join去掉,例如:
// 原代码 Console.WriteLine("Name: " + string.Join(",", Name)); // 修改为 Console.WriteLine("Name: " + Name);
Mage类的Output方法同理修改,删掉string.Join即可。
合规修复(符合作业多角色存储要求)
如果作业要求用数组存储多个角色,建议调整设计逻辑:
- 角色类(
PlayerCharacter及子类)仅存储单个角色的普通属性,不要用数组 - 在
Main方法中声明长度为10的PlayerCharacter[] characterArray,或者用List<PlayerCharacter>存储所有创建的角色实例 - 查看角色时直接遍历数组/列表,调用每个实例的
Output方法即可
内容的提问来源于stack exchange,提问作者Zhedric Brillante-Pili
相关产品推荐
相关产品推荐

