为了账号安全,请及时绑定邮箱和手机立即绑定

输入姓名ID,年龄,再打印输出,为什么我的代码只能输出年龄?

输入姓名ID,年龄,再打印输出,为什么我的代码只能输出年龄?

饮歌长啸 2018-12-06 16:05:51
class Program { static void Main(string[] args) { int i = 0; string strName = ""; string stId = ""; string ages = ""; Student[] stus = new Student[5]; Console.WriteLine("请输入学员信息:"); for (i = 0; i < stus.Length; i++) { Console.WriteLine("请输入第{0}个学员的姓名:", i + 1); stus[i] = new Student(); while (true) { Console.Write("姓名:"); strName = Console.ReadLine(); stus[i] = new Student(); if (stus[i].setStuName(strName)) { break; } else { Console.WriteLine("您输入的学员姓名不正确!"); } } while (true) { Console.Write("ID:"); stId = Console.ReadLine(); stus[i] = new Student(); if (stus[i].setStuId(stId)) { break; } else { Console.WriteLine("你输入的学号不正确!"); } } while (true) { Console.Write("年龄:"); ages = Console.ReadLine(); stus[i] = new Student(); if (stus[i].setStuAge(ages)) { break; } else { Console.WriteLine("你输入的年龄错误!"); } } } for (int x = 0; x < stus.Length; x++) { stus[x].showStuInfo(stus[x].stuId, stus[x].stuName, stus[x].stuAge); } } class Student { public int stuId; public string stuName; public int stuAge; public Student() { stuId = 0; stuName = ""; stuAge = 0; } /// <summary> /// 显示学员信息 /// </summary> public void showStuInfo(int _id, string _name, int _age) { Console.WriteLine("{0}+{1}+{2}", _id, _name, _age); } /// <summary> /// 设置学员ID /// </summary> /// <param name="_id">必须是小于100的正整数</param> /// <returns></returns> public bool setStuId(string _id) { int value = int.Parse(_id); if (value > 0 && value < 100) { stuId = value; return true; } else { return false; } } /// <summary> /// 设置学员姓名 /// </summary> /// <param name="_name">不能为空,不能为admin</param> /// <returns></returns> /// if (stus[i].setStuName(strName)) public bool setStuName(string _name) { if (_name == "" || _name == "admin") { return false; } else { stuName = _name; return true; } } /// <summary> /// 设置学员的年龄 /// </summary> /// <param name="_age">必须在18-60(含)之间</param> /// <returns></returns> public bool setStuAge(string _age) { int value = int.Parse(_age); if (value >= 18 && value <= 60) { stuId = value; return true; } else { return false; } } }
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

将三个while循环中的stus[i] =new Student(); 这句代码注释就行。

用new关键字创建对象时,都会重新开辟内存空间。每new一个对象就分配了一个不同的对象,假设i=0的这次循环中,伱总共给stus[0]分配了四次对象,相当于stus[0]=空对象;stus[0]=只有姓名的对象;stus[0]=只有Id的对象;stus[0]=只有年龄的对象;因为只有年龄的对象在最后,所以stus[0]=只有年龄的对象。

查看完整回答
反对 回复 2019-01-21
?
杨魅力

TA贡献1811条经验 获得超6个赞

你在每个输入项目的时候,都重新 new 一个 Student 对象,在第三次的时候,已经将原来的对象给替换了。

其实,最后,只有最后的那个 Student 对象,当然没有姓名和编号了。

将三个 while 中的 new 对象一行删掉吧。

查看完整回答
反对 回复 2019-01-21
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我个人感觉,还是把哪些字段组合到一块,写成一个数组方便

查看完整回答
反对 回复 2019-01-21
  • 3 回答
  • 0 关注
  • 365 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信