Java文件操作(求各专业第一名的学生)
两个文件: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文件操作(求各专业第一名的学生)的更多相关文章
- Java文件操作源码大全
Java文件操作源码大全 1.创建文件夹 52.创建文件 53.删除文件 54.删除文件夹 65.删除一个文件下夹所有的文件夹 76.清空文件夹 87.读取文件 88.写入文件 99.写入随机文件 9 ...
- 14、Java文件操作stream、File、IO
1.文件操作涉及到的基本概念 File File类 是文件操作的主要对象中文意义就是 文件 顾名思意 万物皆文件,在计算上看到的所有东西都是文件保存,不管是你的图片.视频.数据库数据等等都是按照基本的 ...
- Java 文件操作大全
Java 文件操作大全 //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPat ...
- JAVA文件操作类和文件夹的操作代码示例
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
- java文件操作(普通文件以及配置文件的读写操作)
转自:java文件操作(普通文件以及配置文件的读写操作) 读取普通文件 : /** * xiangqiao123欢迎你 如果对代码有疑问可以加qq群咨询:151648295 * * 读取MyFile文 ...
- Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比
Java文件操作API功能与Windows DOS命令和Linux Shell 命令类比: Unix/Linux (Bash) Windows(MS-DOS) Java 进入目录 cd cd - 创建 ...
- java 文件操作(二)---Files和Path
自从java 7以来,引入了FIles类和Path接口.他们两封装了用户对文件的所有可能的操作,相比于java 1的File类来说,使用起来方便很多.但是其实一些本质的操作还是很类似的.主要需要知道的 ...
- Java文件操作类效率对比
前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...
- Java文件操作系列[2]——使用JXL操作Excel文件
由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别 ...
随机推荐
- Piakchu之RCE漏洞
一.Ping(远程系统命令执行) 首先正常输入一个ip,查看页面的返回值.发现有乱码,但是能看出执行了ping命令. 查看源代码,可以看到只是对操作系统进行了判断,而对输入内容是否为ip地址并没有判断 ...
- httprunner3源码解读(1)简单介绍源码模块内容
前言 最近想着搭建一个API测试平台,基础的注册登录功能已经完成,就差测试框架的选型,最后还是选择了httprunner,github上已经有很多开源的httprunner测试平台,但是看了下都是基于 ...
- .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 系列文章目录: https://blog.shengxunwei.com/Home/Post/44a3 ...
- JavaScript事件捕获冒泡与捕获
事件流 JavaScript中,事件流指的是DOM事件流. 概念 事件的传播过程即DOM事件流.事件对象在 DOM 中的传播过程,被称为"事件流".举个例子:开电脑这个事,首先你是 ...
- $router 和 $route的区别
router router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局对象,他包含了所有的路 ...
- LiteFlow 2.6.4版本发行注记,里程碑版本!
一 这个版本做的很折腾.期间几个issue推翻重做了好几次. 但我最终还是带来了LiteFlow 2.6.4这个重要版本. 虽然版本是小版本号升级,但是带来的更新可一点也不少.并完全向下兼容. 如果你 ...
- [第三章]c++学习笔记1(this指针)
this指针作用,其作用就是指向成员函数所作用的对象 使用例 为了返回c1,使用this指针,来指向作用的对象 使用空指针调用hello,调用hello欲使其作用在p指向的对象上,然而p没指向任何对象 ...
- requests_cookie登陆古诗文网。session的使用
通过登录失败,快速找到登录接口 获取hidden隐藏域中的id的value值 # 通过登陆 然后进入到主页面 # 通过找登陆接口我们发现 登陆的时候需要的参数很多 # _VIEWSTATE: /m1O ...
- 微软商店打不开的教程(错误代码0x80131500)
1 打开win+R 输入`inetcpl.cpl` 2 点击高级 3 勾选上`使用TLS 1.2`或者点击还原默认设置就可以啦 4 然后就可以打开啦
- Jetpack架构组件学习(2)——ViewModel和Livedata使用
要看本系列其他文章,可访问此链接Jetpack架构学习 | Stars-One的杂货小窝 原文地址:Jetpack架构组件学习(2)--ViewModel和Livedata使用 | Stars-One ...