我有一个String的ArrayList,名为" info"每个字符串包含有关我的班级学生实例的信息。 我尝试将Arraylist转换为数组,然后使用split方法解析它。
String[] Stringinfo = new String[info.size()];
Stringinfo = info.toArray(Stringinfo);
在我解析每一行后,我尝试在for循环中创建一个新对象并将其添加到Students ArrayList。会发生的是每次我创建这个新对象时,之前添加到Students ArrayList的其他对象都会更改为这个新对象。
String[] temp;
for(int i = 1; i < LineCount + 1 ; i++)
{
temp = Stringinfo[i].split(" ");
Student s = new Student(Integer.parseInt(temp[0]), Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), Integer.parseInt(temp[3]), Integer.parseInt(temp[4]));
Students.add(s);
}
我尝试在不同的点上打印学生,并且在创建新对象之前一切正常。 在任何时候,所有对象都具有与最后创建的对象相同的属性值。
这是Student类构造函数:
public Student(int certif, int class_id, int ave, int i, int a)
{
certification_num = certif;
class_id = class;
average_point = ave;
student_id = i;
age = a;
}
我搜索了很多,但无法找到答案。很抱歉,如果答案很明显,我是Java的新手。 任何帮助,将不胜感激。 提前谢谢。
编辑:
public class Student{
public Student(){}
public Student(int certif, int class, int ave, int i, int a)
{
certification_num = certif;
class_id = class;
average_point = ave;
student_id = i;
age = a;
}
public static int get_certification_num(){
return certification_num;
}
public static int get_class_id(){
return class_id;
}
public static int get_average_point(){
return average_point;
}
public static int get_id(){
return student_id;
}
public static int get_age(){
return age;
}
private static int certification_num;
private static int class_id;
private static int age;
private static int node_id;
private static int student_id;
}
答案 0 :(得分:2)
从static
课程中取出Student
一词。
static
表示“所有学生中的一个”。但是每个学生都应该有不同的年龄,身份等等,所以这些领域(以及相关的方法)不应该是静态的。
答案 1 :(得分:0)
静态成员意味着该成员属于该类而不属于该对象,因此您的成员不断变化。
我的猜测是你的成员是静态的,所以尝试像这样定义你的Student类:
public class Student {
private int certification_num;
private int class_id;
private int average_point;
private int student_id;
private int age;
public Student(int certif, int clazz, int ave, int i, int a)
{
this.certification_num = certif;
this.class_id = clazz;
this.average_point = ave;
this.student_id = i;
this.age = a;
}
}
答案 2 :(得分:0)
首先,我建议你改变你的学生课程如下:
public class Student
{
private int certification_num;
private int class_id;
private int average_point;
private int student_id;
private int age;
public int getCertification_num() {
return this.certification_num;
}
// Do this for all variables
public void setCertification_num(int certif) {
this.certification_num = certif;
}
// Do this for all variables
}
之后,您可以轻松使用您的学生课程。在其他情况下,当您没有或不需要所有信息时。
填充你的数组:
ArrayList<Student> students = new ArrayList<Student>();
for(int i = 1; i < LineCount + 1 ; i++)
{
String[] temp;
temp = Stringinfo[i].split(" ");
Student s = new Student();
s.setCertification_num(Integer.parseInt(temp[0]);
//Do for all other fields
Students.add(s);
}