我正在尝试创建一个数组来收集学生,并为每个学生创建一个成绩数组。我的 int 计数将随着 while 循环或其他东西而增加。问题是我的学生数组出错。有替代方法吗?
static int count = 0;
static int[] Grades = new int[count];
static String[] Students = new String[Grades[count];
您可以创建一个包含姓名、年龄...等和成绩的数组/列表的学生类:
class Student {
String name;
String age;
//...
List<Integer> grades;
//Getters & Setters of course
}
您可以添加一个获取 {name:grades} 地图的方法
这种设计将来会给您带来很多问题。如果你真的想坚持使用数组,请考虑二维数组。
一个更好和更干净的设计将是使用如下地图。
map<Student, List<Grades>> studentGrades= new Hashmap <Student, List<Grades>>() ;
你可以有一个二维数组。类似于数组的数组,每个项目都包含一个完整的数组:
int[][] students = new int[num_of_students][]
然后,您可以动态更改每个学生的每个数组的长度:
for (int i = 0; i < num_of_stuent; i++)
students[i] = new int[i + 1]
怎么样:
Map<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
加上:
String student = "Bobby";
int mark = 85;
if (map.containsKey(student))
map.get(student).add(mark);
else
{
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(mark);
map.put(student, arr);
}
显示:
System.out.println(map);
或者:
for (Entry<String, ArrayList<Integer>> entry: map.entrySet())
System.out.println("Marks of " + entry.getKey() + " = " + entry.getValue());
扩展功能以允许学生拥有更多属性:
class Student
{
ArrayList<Integer> marks;
// ...
}
宣言:
Map<String, Student> students = new HashMap<String, Student>();