2 qq 30066383 qq_30066383 于 2016.02.01 19:43 提问

请教一个Java问题,想了好几天一直做不出来!

图片说明
我将文件读出来存放在arrayList集合中,但是遍历输出的结果总是重复。
请教这道题应该怎么做?

3个回答

caozhy
caozhy   Ds   Rxr 2016.02.01 21:01
 其实就是HashMap的嵌套。
HashMap<String, HashMap<String, ArrayList>> map
外侧的Hashmap的Key是姓名,值是一个Hashmap
这个Hashmap的Key是科目,值是一个ArrayList
每个List的值是一个分数
遍历你的文件,先找外侧的Hashmap有没有名字,没有就新建一个,否者找到对应的Hashmap
再找有没有科目,有的话,把分数添加上

输出的时候遍历外侧msp得到姓名,每个姓名得到科目,每个科目再根据ArrayList算出平均分。
caozhy
caozhy 回复qq_30066383: 没必要对原始的数据再存入arraylist,按照我说的,对于同一个人的同一个科目需要一个arraylist
接近 2 年之前 回复
qq_30066383
qq_30066383 我现在i将读出来的文件每一行按照分号字符串分割开来,他们就自动存进数组里了,我现在将这每一行的数组存进什么里好呢?我现在选用的是arraylist,还是说存进您说嵌套的map里面呢?
接近 2 年之前 回复
qq_30066383
qq_30066383 回复caozhy: 我其实就是一个初学者,可能还是不能完全领悟。
接近 2 年之前 回复
caozhy
caozhy 回复qq_30066383: 如果有,那么你下一步get函数获取内侧的Hashmap,而不是创建一个新的
接近 2 年之前 回复
qq_30066383
qq_30066383 您看您有空的时候给小弟写下代码,我现在卡住了,写不下去了。
接近 2 年之前 回复
qq_30066383
qq_30066383 那您的意思是我要把读出来的文件放到这个嵌套的hashmap里面然后遍历?
接近 2 年之前 回复
qq_30066383
qq_30066383 我也相待了hashmap的嵌套,可是如果外侧的hashmap有名字,对应的值不就更新了吗?
接近 2 年之前 回复
zrf1335348191
zrf1335348191   2016.02.01 20:18

建议你使用Map键值对来读取数据,即将姓名作为标志键,新建一个类grade,将学科和分数保存到grade中
Map> grade = new HashMap>();

public class Grade {

private String subject;
private String score;


public Grade(String subject, String score) {
    super();
    this.subject = subject;
    this.score = score;
}
public String getSubject() {
    return subject;
}
public void setSubject(String subject) {
    this.subject = subject;
}
public String getScore() {
    return score;
}
public void setScore(String score) {
    this.score = score;
}

}


qq_30066383
qq_30066383 回复飞鸿眉敛: 我现在i将读出来的文件每一行按照分号字符串分割开来,他们就自动存进数组里了,我现在将这每一行的数组存进什么里好呢?我现在选用的是arraylist,还是说存进您说map的键值对呢?
接近 2 年之前 回复
qq_30066383
qq_30066383 我现在i将读出来的文件每一行按照分号字符串分割开来,他们就自动存进数组里了,我现在将这每一行的数组存进什么里好呢?我现在选用的是arraylist,还是说存进您说map的键值对呢?
接近 2 年之前 回复
yishuidongtian
yishuidongtian 回复飞鸿眉敛: 因为total是最开始加入的,所以list的第一个就是总成绩,最后根据list的长度和total里的值就可以算出平均分
接近 2 年之前 回复
yishuidongtian
yishuidongtian 回复qq_30066383: 按照他的,构建一个map<string,List<Grade>>对象,读取完一行以后,解析出名字,查找map里面有没有,如果没有,就新建一个list插入,并增加total作为一个学科,就好了
接近 2 年之前 回复
qq_30066383
qq_30066383 那学科的那个平均值怎么求呢
接近 2 年之前 回复
zrf1335348191
zrf1335348191   2016.02.01 20:22

打印至控制台使用format格式化输出,就ok了,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!