java - 具有多个 ArrayList 的基本 Java 编程

标签 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 ;
        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();
   }
}

但是,现在我想在代码中添加一个部分,该部分读取每个学生 5 次测验的分数,并将测验分数加载到 Integer 类型的 ArrayList 中

所以我知道我需要使用

ArrayList<Integer> quizMarks = readArrayList(readQuiz.nextLine());

然后将其传递给此代码,该代码获取测验分数并将它们从 15 而不是 100 中加权

public static ArrayList<Integer> readArrayList(String input)
{
    ArrayList<Integer> quiz = new ArrayList<Integer>();

    int i = 1;
    while (i <= QUIZLIMIT)
    {
       if (readQuiz.hasNextInt()) {
        quiz.add(readQuiz.nextInt());
        i++;
       } else {
           readQuiz.next(); // toss the next read token
       }
   }
   return quiz;
 }
 //Computer the average of quiz marks
 public static void computerAverage(ArrayList<Integer>quiz)
 {
    double total = 0 ;
    for(Integer value : quiz)
    {
        total = total + value;
    }
    total *= MAX_SCORE/100;
   System.out.println("Quiz Avg: "+ total / QUIZLIMIT ); 
  }
 }

所以我当前的输入代码:

Sally Mae 90 80 45 60 75
Charlotte Tea 60 75 80 90 70
Oliver Cats 55 65 76 90 80
Milo Peet 90 95 85 75 80
Gavin Brown 45 65 75 55 80

给出输出

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

最佳答案

正如 Jim 所说,您应该将分数和学生姓名存储在同一个类(class)中。这样做的原因是假设您想要查找名为 Raj 的特定学生的分数。

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

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

有了一个类(class),您就可以轻松地对属于某个学生的所有数据进行分组。

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

class Student {
    private String name;
    private Double marks;

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

    //getters setters
}

有一个学生名单

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

阅读后您会将对象附加到此列表

students.add(new Student(name, marks));

计算平均值如下

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

结帐 https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html其他获取平均值的方法。

关于java - 具有多个 ArrayList 的基本 Java 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38406326/

相关文章:

java.util.AbstractList.remove 处的 java.lang.UnsupportedOperationException(未知来源)

java - 与ask.wireshark.org 的 https 连接无法正常工作

java - "JsonParseException: Unparseable date:"- 安卓错误

arrays - 如何过滤数组中既匹配某个模式又不匹配第二个模式的元素?

arrays - 从空数组中检索值

python - 在另一个数组中查找数组的字符串元素

Java:数组,多个类

java - [Java]在没有 hashmap 的字符串中查找重复字符并设置

java - 当Android应用程序处于概览状态时如何更改 Activity/ View

c - "Expected expression before ' { ' token"