具有多个ArrayList的基本Java编程

具有多个ArrayList的基本Java编程,java,arrays,Java,Arrays,在下面的代码中,我获取了一个包含5个学生姓名的列表,并将它们加载到一个String类型的ArrayList中 import java.util.Scanner; import java.util.ArrayList; public class QuizAverage { public static void main( String[] args ) { final int NAMELIMIT = 5 ; final int QUIZLIMIT = 5 ;

在下面的代码中,我获取了一个包含5个学生姓名的列表,并将它们加载到一个String类型的ArrayList中

import java.util.Scanner;
import java.util.ArrayList;
public class QuizAverage
{
    public static void main( String[] args ) {
        final int NAMELIMIT = 5 ;
        final int QUIZLIMIT = 5 ;
        ArrayList<String> sNames = new ArrayList<String>();
        ArrayList<String> sFamily = new ArrayList<String>();
        Scanner in = new Scanner(System.in);
        //Load the 5 names of the students in the arraylist
        for(int i = 1; i<=NAMELIMIT; i++)
        {
            String[] input = in.nextLine().split("\\s+");

            sNames.add(input[0]);
            sFamily.add(input[1]);
        }
        System.out.println("Name: ");
        System.out.println();
        for(int i=0; i<NAMELIMIT; i++)
        {
            System.out.println("Name: " +sNames.get(i) + " " +    sFamily.get(i));
        }
        System.out.println();
   }
}
给出输出

Name: Sally Mae
Name: Charlotte Tea
Name: Oliver Cats
Name: Milo Peet
Name: Gavin Brown
当所需输出为

Name: Sally Mae Quiz Avg: 10.5
Name: Charlotte Tea Quiz Avg: 11.25
Name: Oliver Cats Quiz Avg: 10.95
Name: Milo Peet Quiz Avg: 12.75
Name: Gavin Brown Quiz Avg: 9.6

据我所知,您还没有调用
computerAverage()

不要使用并行数组。改用
学生
课程:

public class Student {
    private String name;
    private String family;
    private List<Integer> marks = new ArrayList<>();
    public Student(String name, String family)
    {
         this.name = name;
         this.family = family;
    }

    //  getters, setters
    ...

    public void addMark(int mark)
    {
        this.marks.add(mark);
    }
    public void getAverage()
    {
         ... // etc
    }
}
公共班级学生{
私有字符串名称;
私弦家庭;
私有列表标记=新的ArrayList();
公立学生(字符串名称、字符串族)
{
this.name=名称;
这个家庭=家庭;
}
//能手,二传手
...
公共无效地址标记(整数标记)
{
此.marks.add(标记);
}
public void getAverage()
{
…//等等
}
}
然后将该类的实例存储在主程序的单个列表中

List<Student> students = new ArrayList<>();
List students=new ArrayList();

正如吉姆所说,你应该把分数和学生的名字存储在同一个班级里。这样做的原因是说,继续前进,你想找到一个名为Raj的特殊学生的分数

在您的实现中,您必须遍历第一个数组来查找名为Raj的人的索引,然后转到marks数组中的同一个索引。如果在初始化第一个数组时没有问题,但是在创建标记数组时出现了一些问题,那么最终可能会得到错误的标记

此外,如果您必须向学生添加新属性,则必须创建一个新数组,然后再添加一个逻辑来读取该数据

通过上课,您可以轻松地将属于某个学生的所有数据分组

对于你的平均问题,我有一个如下的课程

class Student {
    private String name;
    private Double marks;

    public Student(String name, String marks) {
        this.name = name;
        this.marks = marks;
    }

    //getters setters
}
Double average = 0;
for(Student student: students) {
    average += student.getMarks();
}
average = average / student.size();
有学生名单

List<Student> students = new ArrayList<Student>();
计算平均值如下

class Student {
    private String name;
    private Double marks;

    public Student(String name, String marks) {
        this.name = name;
        this.marks = marks;
    }

    //getters setters
}
Double average = 0;
for(Student student: students) {
    average += student.getMarks();
}
average = average / student.size();

检查其他方法以获得平均值。

这种方法被称为“并行阵列”,是非常糟糕的设计。创建一个
Student
类,该类存储学生的名字、姓氏和成绩列表。@timNorth听Jim Garrison说。我走了这条路,相信我,它不会有好的结局:P
students.add(new Student(name, marks));
Double average = 0;
for(Student student: students) {
    average += student.getMarks();
}
average = average / student.size();