我正在尝试为我的arraylist对象添加一个等级,当我尝试将两个不同的等级添加到两个不同的arraylist对象时,evetything看起来没问题,但是当我尝试打印这两个对象时,它打印出两个等级都属于同一个宾语。当您看到样本执行时,您将会理解。
这是我的主要方法。
Student s1 = new Student("Cuneyt Cakir", "Istanbul", 35);
Student s2 = new Student("Halis Ozkahya", "Yalova", 28);
Student s3 = new Student("Mustafa Kamil Abitoglu", "Antalya", 20);
s1.addGrade(15);
s1.addGrade(89);
s1.addGrade(26);
s1.addGrade(44);
s2.addGrade(33);
System.out.println(s1);
System.out.println(s2);
结果是:
姓名:Cuneyt Cakir /城市:伊斯坦布尔/年龄:35
成绩:[15,89,26,44,33]
姓名:Halis Ozkahya /城市:Yalova /年龄:28岁 成绩:[15,89,26,44,33]
这是我在Students课程中的添加方法:
public static void addGrade(int grade) {
if(grade>=0 && grade<=100){
grades.add(grade);
} else
System.out.println("Invalid grade.");
}
这是学生班的另一部分:
public static ArrayList<Integer> grades=new ArrayList<Integer>();
public Student(String value1, String value2, int value3) {
name=value1;
city=(value2);
age=(value3);
}
我正在使用此代码获得成绩:
public ArrayList<Integer> getGrades() {
return grades;
}
预期输出为:
姓名:Cuneyt Cakir /城市:伊斯坦布尔/年龄:35
成绩:[15,89,26,44]姓名:Halis Ozkahya /城市:Yalova /年龄:28岁 成绩:[33]
答案 0 :(得分:2)
因为grades
是一个静态变量。删除'static'关键字为每个对象创建一个新的ArrayList实例。
类中的静态变量对所有对象都是通用的。所以`等级'变量对于所有S1,S2和S3实例都是通用的。
答案 1 :(得分:1)
删除静态修改器,
public static ArrayList<Integer> grades=new ArrayList<Integer>();
更改为,
public ArrayList<Integer> grades=new ArrayList<Integer>();
静态修饰符使得&#34;成绩&#34;班级成员。删除静态使其成为实例成员