两个文件:info.txt 存放学生基本信息

  学号 学院 专业 姓名
  1001 计算机学院 软件工程 刘月
  1002 生物工程 服装设计 孙丽

score.txt存放分数信息

  学号 学科 成绩

  1001 数据结构 85
  1001 线性代数 89
  1002 数据库 100
  1002 面料工艺 30

求各学院各专业总分最高的学生。

首先分析,学号--专业是一对一的,一个学生只能属于一个专业,为简单起见, 对于并列第一名的学生,只取第一个。

Student.java

public class Student {
private int id;
private String school;
private String major;
private String name; public Student()
{ } public Student(int id,String school,String major,String name)
{
this.id = id;
this.school = school;
this.major = major;
this.name = name;
} public String toString(){
return this.id +" "+this.school +" "+ this.name+" "+this.major;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }

PrintTheNo1.java

import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set; public class PrintTheNo1 { public static void main(String [] args) throws IOException
{
try{
LinkedList<Student> stuList =getStuList();
HashMap<Integer,Double> map = getSumScoreOfStudent();
getTopStu(stuList,map);
}catch(IOException io)
{
System.out.println("出错了呀!"+io);
}
}
//读取info文件
public static LinkedList<Student> getStuList() throws IOException
{
String oneLine;
try{
FileReader a = new FileReader("D:\\NewPro\\Files\\info.txt");
BufferedReader br = new BufferedReader(a);
int line = 0;
LinkedList<Student> stuList = new LinkedList<Student>();
while((oneLine = br.readLine() )!= null)
{
//从文件的第二行开始读取数据
line++;
if(line == 1) continue;
else
{
String[] info = oneLine.split(" ");
Student stu = new Student(Integer.parseInt(info[0]),(String)info[1],(String)info[2],(String)info[3]);
stuList.add(stu);
}
}
for(Student s:stuList)
System.out.println(s.toString());
br.close();
return stuList;
}catch(IOException io)
{
System.out.println("error@"+io);
return null;
}
} //求各个学生的总分
public static HashMap<Integer,Double> getSumScoreOfStudent() throws IOException
{
HashMap<Integer,Double> map = new HashMap<Integer,Double>();
String oneLine;
try{ FileReader a = new FileReader("D:\\NewPro\\Files\\score.txt");
BufferedReader br = new BufferedReader(a);
int line = 0;
double sum = 0; while((oneLine = br.readLine() )!= null)
{
++line;
if(line == 1) continue;
else
{
String [] info = oneLine.split(" ");
int id = Integer.parseInt(info[0]);
if(map.containsKey(id))
{
sum = map.get(id)+Double.parseDouble(info[2]);
map.put(id,sum);
}
else
map.put(id,Double.parseDouble(info[2]));
}
} return map; }catch(IOException io)
{
System.out.println("error in score.txt"+io);
return null;
}
}
//各个专业第一名的学生
public static void getTopStu(LinkedList<Student> stuList,HashMap<Integer,Double> map)
{
Student s = new Student();
int id =0;
double score = 0;
double maxScore = 0;
String major;
//MajorAndScore保存专业--最高分
HashMap<String,Double> MajorAndScore = new HashMap<String,Double>();
//result保存 专业--学号,然后遍历result,根据result的学号值找到Student信息,保存到topStudent链表中。
HashMap<String,Integer> result = new HashMap<String,Integer>();
LinkedList<Student> topStudent = new LinkedList<Student>(); if(stuList.size() == 0 || map.size() ==0 )
return;
for(int i=0;i<stuList.size();i++)
{
s = stuList.get(i);
id =s.getId();
score = map.get(id);//拿到该学生的总分
major = s.getMajor();
if(map.containsKey(id) )
{
if(MajorAndScore.containsKey(major) && score > maxScore)
//如果已经有major.且当前学生的总分更大一些,把更大的分数加进去
{
maxScore = score;
MajorAndScore.put(major,maxScore);
result.put(major,id); } else if(!MajorAndScore.containsKey(major))
//如果不存在major key
{
MajorAndScore.put(major,score);
result.put(major,id); }
else
{
map.remove(id);
}
}
}
@SuppressWarnings("rawtypes")
Set st = result.entrySet();
Iterator it =st.iterator();
while(it.hasNext())
{ Map.Entry entry = (Map.Entry)it.next();
topStudent.add(getById(stuList,(Integer)entry.getValue()));
} System.out.println( "各专业第一名是: ");
for(int i=0;i<topStudent.size();i++)
{ System.out.println(topStudent.get(i).toString());
} } //根据id找到学生信息
private static Student getById(LinkedList<Student> stuList,int id)
{
for(int i=0;i<stuList.size();i++)
{
if(stuList.get(i).getId() == id)
{
return stuList.get(i);
}
}
return null;
} }

Java文件操作(求各专业第一名的学生)的更多相关文章

  1. Java文件操作源码大全

    Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...

  2. 14、Java文件操作stream、File、IO

    1.文件操作涉及到的基本概念 File File类 是文件操作的主要对象中文意义就是 文件 顾名思意 万物皆文件,在计算上看到的所有东西都是文件保存,不管是你的图片.视频.数据库数据等等都是按照基本的 ...

  3. Java 文件操作大全

    Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...

  4. JAVA文件操作类和文件夹的操作代码示例

    JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...

  5. java文件操作(普通文件以及配置文件的读写操作)

    转自:java文件操作(普通文件以及配置文件的读写操作) 读取普通文件 : /** * xiangqiao123欢迎你 如果对代码有疑问可以加qq群咨询:151648295 * * 读取MyFile文 ...

  6. Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比

    Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...

  7. java 文件操作(二)---Files和Path

    自从java 7以来,引入了FIles类和Path接口.他们两封装了用户对文件的所有可能的操作,相比于java 1的File类来说,使用起来方便很多.但是其实一些本质的操作还是很类似的.主要需要知道的 ...

  8. Java文件操作类效率对比

    前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...

  9. Java文件操作系列[2]——使用JXL操作Excel文件

    由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别 ...

随机推荐

  1. OpenAPITools 实践

    OpenAPITools 可以依据 REST API 描述文件,自动生成服务端桩(Stub)代码.客户端 SDK 代码,及文档等.其是社区版的 Swagger ,差异可见:OpenAPI Genera ...

  2. python与C结构体之间二进制数据转换

    python与C结构体之间数据转换 前言 在实际应用中,可能会遇到直接和C进行二进制字节流协议通信,这时要把数据解包成python数据,如果可能,最好与C定义的结构体完全对应上. python中有2种 ...

  3. flask gevent

    flask的不同部署方式 使用gevent部署,只是在不同请求之间是异步的,同一个请求之间还是串行的. https://iximiuz.com/en/posts/flask-gevent-tutori ...

  4. redis批量操作

    由于redis没有批量删除命令,所以借助xargs redis-cli -h 127.0.0.1 keys testdata_2018* |xargs redis-cli -h 127.0.0.1 d ...

  5. mysql: 看不见的空符号 char(9) char(10) char(13)

    在统计年度销售额时,总觉得哪里不对劲.于是找了找,对了对,试了trim,消除前后的空格,也没反应. 在崩溃的边缘,终于发现了错的原因. 原来我在录入的时候,粘贴多了其他空白符号,看不见,摸不着,啊~ ...

  6. JDK的第三个LTS版本JDK17来了

    目录 简介 JDK17中的新特性 语言上的新特性 核心库的优化 支持新的平台 预览特性 其他改动 总结 简介 2021年9月JDK17发布了,JDK17是最新的一个LTS版本.所谓LTS版本就是可以得 ...

  7. Django笔记&教程 1-1 一 新建项目

    Django 自学笔记兼学习教程第1章第1节--一 新建项目 点击查看教程总目录 1- 命令行新建Django项目 新建项目命令(project_name处为项目名) django-admin sta ...

  8. 菜鸡的Java笔记 日期操作类

    日期操作类        Date 类与 long 数据类型的转换        SimpleDateFormat 类的使用        Calendar 类的使用                如 ...

  9. vue + cesium开发(3) cesium1.87更新问题

    官方在2021年11月1号更新日志中记录了他们把zip.js升级到了2.3.12以适应webpack4中的关于import.meta不兼容的语法问题,但是经过实测,1.87版本依然没有解决这个问题,所 ...

  10. Scrum精髓读书笔记

    Scrum精髓 四 . Sprint Sprint的定义 Scrum在最长一个月的迭代或周期中安排工作,一般为2个星期,这些迭代或周期称为Sprint Sprint提供基本的Scrum骨架,大多数其他 ...