读取带有名称和分数的输入文件,使用ArrayLists计算值

时间:2014-11-14 00:36:49

标签: java arraylist

我没有按以下格式输入文件: 罗里威廉姆斯 88 92 78 -1 詹姆斯巴恩斯 87 76 91 54 66 -1 等等....

我想读取每个人的分数,直到我达到-1并将分数存储在ArrayList中。我理解如何将得分转换为一个人的ArrayList,但我不明白如何按人分组或为下一个人读取分数。

对于个人,我的方法如下:

private static ArrayList<Integer> readNextSeries(Scanner in) {
        ArrayList<Integer> scores = new ArrayList<Integer>();
        int x=0;
        while (in.hasNextLine())
        {   
            if (scores.get(x)!=-1)
            {
            scores.add(in.nextInt());
            x++;
            }
        }
        return scores;
    }

我们必须以某种方式存储不同人的分数,因为那时我们必须计算每个人的平均分,中位数,最大分和最小分数,然后计算最高的平均分数和最低的平均分数。人。我唯一的另一个想法是,也许我可以为每个人创建一个单独的ArrayList,使用他们的名字作为ArrayList名称 - 我不确定这是否正确。

2 个答案:

答案 0 :(得分:1)

您应该使用HashMap。这是此数据结构的完美用例。能够根据它的关联对事物进行分组并访问它们。在某些语言中,它被称为associative arraydictionary

http://en.wikipedia.org/wiki/Hash_table

答案 1 :(得分:0)

您的方法对于一个人来说应该是这样的

private static ArrayList<Integer> readNextSeries(Scanner in)
{
    ArrayList<Integer> scores = new ArrayList<Integer>();
    if (in.hasNextLine())
    {
        int score = in.nextInt();
        if (score !=-1)
        {
            scores.add(score);
        }
        else
        {
            return scores;
        }
    }
    return scores;
}

因为scores最初是一个空的ArrayList而scores.get(x)的{​​{1}}会抛出一个x = 0

对于所有文件:

IndexOutOfBoundsException