C# 如何将我的姓名和性别变量放入数组中?
我正在尝试制作一个学生记录应用程序,我能够从文本文件中分离姓名和性别,但是当我尝试将它们放入数组时,数组总是显示为空。addStudent方法在我单独尝试时有效C# 如何将我的姓名和性别变量放入数组中?,c#,C#,我正在尝试制作一个学生记录应用程序,我能够从文本文件中分离姓名和性别,但是当我尝试将它们放入数组时,数组总是显示为空。addStudent方法在我单独尝试时有效 StudentList list = new StudentList(); string name = ""; string gender = ""; string line = ""; char[] selected = line.ToCharArray(
StudentList list = new StudentList();
string name = "";
string gender = "";
string line = "";
char[] selected = line.ToCharArray();
openFileDialog1.ShowDialog();
string file = openFileDialog1.FileName;
StreamReader sr = new StreamReader(file);
while ((line = sr.ReadLine()) != null)
{
studentList.Items.Add(line);
for (int i = 0; i < selected.Length; i++)
{
if (selected[i] != '(')
{
name += selected[i];
}
else if (selected[i] == '(')
{
gender += selected[i + 1];
break;
}
Student student = new Student();
student.setName(name);
student.setGender(gender);
list.addStudent(student);
}
}
StudentList=newstudentlist();
字符串名称=”;
字符串性别=”;
字符串行=”;
char[]selected=line.ToCharArray();
openFileDialog1.ShowDialog();
string file=openFileDialog1.FileName;
StreamReader sr=新的StreamReader(文件);
而((line=sr.ReadLine())!=null)
{
学生列表。项目。添加(行);
对于(int i=0;i
这是我根据名称和性别排列变量的另一个类(不想更改此代码)
班级学生
{
私有字符串名称;
私人字符串性别;
私人日期时间出生日期;
公立学生()
{
name=null;
性别=零;
birthDate=DateTime.Now;//默认设置为当前日期
}
公共void集合名(字符串n)
{
name=n;
}
公共字符串getName()
{
返回名称;
}
公共无效设置性别(字符串g)
{
性别=g;
}
公共字符串getGender()
{
返回性别;
}
公共无效setBirthDate(日期时间bd)
{
出生日期=bd;
}
public DateTime getBirthDate()
{
返回出生日期;
}
}
班级学生名单
{
私立学生[]名单;
私立国际学生;
私有int-maxNum;
公立学生名单()
{
maxNum=300;
列表=新学生[maxNum];
numStudents=0;
}
公立学生getStudent(整数索引)
{
学生ret=null;
尝试
{
ret=列表[索引];
}
捕获(例外情况除外)
{
MessageBox.Show(“发生异常:+ex.Message”);
}
返回ret;
}
公立学校学生(学生s)
{
bool-ret=假;
if(numStudents
您需要将字符串名称=”;
,字符串性别=”;
和selected=line.tocharray();
放入while
循环中。此外,您还应该在for
循环的外部创建Student
对象
StudentList=新建StudentList()
像这样的东西应该可以做到(我没有编译它,所以可能会有小错误):
请提供一个输入文件结构的示例。您可能可以按字符分割一行,而不是在一行中循环字符。这应该是一个windowsform应用程序,StudentList=new StudentList();用于创建一个已经有另一个类的数组。-Lamatof示例:Bob(M)Mary(F)Kate Jones(F)-RokXif在((line=sr.ReadLine())!=null时,如果我在中移动字符串行,则此操作将不起作用它不断触发我的消息框,通知我数组的限制。限制是300。可疑的是它将每个字母添加到数组中。你能用StudentList
定义更新你的帖子吗?是的,我只是想看看add方法是如何工作的?你add
方法很好,唯一的问题是你应该ld确保您的文件包含的行数不超过300行,并且在for
循环之外调用add
方法
class Student
{
private string name;
private string gender;
private DateTime birthDate;
public Student()
{
name = null;
gender = null;
birthDate = DateTime.Now; // default to set to current date
}
public void setName(string n)
{
name = n;
}
public string getName()
{
return name;
}
public void setGender(string g)
{
gender = g;
}
public string getGender()
{
return gender;
}
public void setBirthDate(DateTime bd)
{
birthDate = bd;
}
public DateTime getBirthDate()
{
return birthDate;
}
}
class StudentList
{
private Student[] list;
private int numStudents;
private int maxNum;
public StudentList()
{
maxNum = 300;
list = new Student[maxNum];
numStudents = 0;
}
public Student getStudent(int index)
{
Student ret = null;
try
{
ret = list[index];
}
catch (Exception ex)
{
MessageBox.Show("Exception has occurred: " + ex.Message);
}
return ret;
}
public bool addStudent(Student s)
{
bool ret = false;
if (numStudents < maxNum-1 )
{
list[numStudents] = s;
numStudents++;
ret = true;
}
else
{
MessageBox.Show("Maximum Students exceeded");
}
return ret;
}
public int getNumStudents()
{
return numStudents;
}
public void clear()
{
for (int i = 0; i < numStudents; i++)
list[i] = null; // set to null
numStudents = 0;
}
public Student findStudent(string name)
{
Student ret = null;
for (int i = 0; i < numStudents; i++ )
{
Student currentStudent = list[i];
if (currentStudent.getName() == name)
{
ret = currentStudent;
break;
}
}
return ret;
}
}
openFileDialog1.ShowDialog();
string file = openFileDialog1.FileName;
StreamReader sr = new StreamReader(file);
string line = "";
while ((line = sr.ReadLine()) != null)
{
string name = "";
string gender = "";
char[] selected = line.ToCharArray();
for (int i = 0; i < selected.Length; i++)
{
if (selected[i] != '(')
{
name += selected[i];
}
else if (selected[i] == '(')
{
gender += selected[i + 1];
break;
}
}
Student student = new Student();
student.setName(name);
student.setGender(gender);
list.addStudent(student);
//Add student objet rather than line string
studentList.Items.Add(student);
}
public override string ToString()
{
return name + "("+ gender+")";
}
StudentList list = new StudentList();
string line = "";
openFileDialog1.ShowDialog();
string file = openFileDialog1.FileName;
StreamReader sr = new StreamReader(file);
while ((line = sr.ReadLine()) != null)
{
string[] lineStudents = line.Split(')');
foreach(string lineStudent in lineStudents)
{
Student student = new Student();
string[] studentProps = lineStudent.Split('(');
student.setGender(studentProps[1]);
student.setName(studentProps[0].Trim());
list.addStudent(student);
}
}