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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
程序员应该如何去请教别人问题
程序员应该如何提问
C# LINQ 动态传参
LINQ 动态传参 想了好几天,终于做出来了,和大家分享下
问题请教工程,问题请教工程
问题请教工程,问题请教工程,问题请教工程,问题请教工程,问题请教工程,问题请教工程,问题请教工程,问题请教工程,
求助各位高手,帮忙做下,谢谢了
由计算机“想”一个四位数,请人猜出这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少时为止。 
英文邮件礼仪:向教授请教学术问题
英文邮件礼仪:向教授请教学术问题   邮件主题 邮件主题(subject)不需要写自己的名字。名字是在邮件系统设置里设定好的,在发件时会替换显示实际地址,所以无需在主题里再写一遍。 [关键内容是要在主题里就写明白是否有推荐人,以及主要是什么事。很多教授只看主题。]   一个好的标题,要能简洁地概括邮件的目的或内容。如果你对教授的某个研究项目感兴趣,就可以用这个研究方向作标题,例如"De
想了好久,做不出来.....求大神解救
#include int main() {     int a[3][3];          scanf("%s",a);     int change(int a);     printf("转置矩阵为%s\n",a);     return 0; } int change(int a) {     int b[3][3]; int i,j;     for(
如何请教别人问题?
提问的智慧。
问题请教高手
问题请教高手问题请教高手
HDOJ 2072
http://acm.hdu.edu.cn/showproblem.php?pid=2072 单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17143    Accepted Submission(s): 4363
HDU:2072 单词数
单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 46180    Accepted Submission(s): 11320 Problem Description lily的好朋友xiaoou333最近很空,他想