首页 新闻 搜索 专区 学院

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

0
悬赏园豆:30 [已解决问题] 解决于 2011-10-17 19:26
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;
}
}
}
VincentZhu的主页 VincentZhu | 初学一级 | 园豆:166
提问于:2011-09-04 15:55
< >
分享
最佳答案
0

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

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

收获园豆:10
IceS | 初学一级 |园豆:197 | 2011-09-15 21:15
其他回答(2)
1

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

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

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

收获园豆:10
冠军 | 园豆:886 (小虾三级) | 2011-09-04 22:09
0

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

收获园豆:10
喬喬AI | 园豆:996 (小虾三级) | 2011-09-08 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册