Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用HashMap将数据输入表

使用HashMap将数据输入表
EN

Stack Overflow用户
提问于 2017-02-11 16:54:40
回答 1查看 740关注 0票数 0

在下面的代码中,我有一个方法,它应该从文本文件(姓氏、名字、类名)中获取数据,并判断学生是否在场(出勤率),然后填充一个表,其值为“仅”学生呈现一定次数(基本上少于输入到文本字段中所指定的时间)。我试过使用hashmap,但不确定在哪里放置" put“语句才能正确填充hashmap。我在表中得到了重复的信息,我不想重复。我的代码如下:任何帮助都将不胜感激。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   public void processFile() throws FileNotFoundException{
   DefaultTableModel model = (DefaultTableModel) this.jTable_areasOfConcern.getModel();  
   File g = new File("pupilSortTemp.txt");      
   InputStream is;
   Scanner scan = null;
   HashMap<Integer, String> attendanceList = new HashMap<>();
   try {
        String firstName;
        String lastName;
        String className;
        String studentKey;
        String tab = "\t";
        String attendance;           
        int attendanceCount = 0;

        int totalDaysOrLessStudentsPresent;
        totalDaysOrLessStudentsPresent = Integer.valueOf(this.jTextField_totalDays.getText());
        is = new FileInputStream(g);
        scan = new Scanner(is);
        String[] array;
        String line = scan.nextLine();            
            if (line.contains(tab)) {
                array = line.split(tab);
            } 
            else {
            array = line.split("\n");
            }
            firstName = array[0];
            lastName = array[1];                   
            className = array[2];
            attendance = array[4];               
            System.out.println("firstName=" + firstName);
            System.out.println("lastName=" + lastName);
            System.out.println("className=" + className);
            System.out.println("attendance=" + attendance);
            if (attendance.equals("Present")){
                attendanceCount++;
                studentKey = firstName + tab + lastName + tab + className;
                attendanceList.put(attendanceCount, studentKey);                     
                System.out.println("attendanceCountIfPresent=" + attendanceCount);
            }
            System.out.println("attendanceCountIfNotPresent=" + attendanceCount);
            while (scan.hasNextLine()) {
                line = scan.nextLine();
                if (line.contains(tab)) {
                    array = line.split(tab);
                }    
                else {
                    array = line.split("\n");
                } 
                System.out.println("array0=" + array[0]);
                System.out.println("array1=" + array[1]);
                System.out.println("array2=" + array[2]);
                System.out.println("array4=" + array[4]);
                if (array[0].equals(firstName) && array[1].equals(lastName)){
                    if (array[4].equals("Present") && (attendanceCount < totalDaysOrLessStudentsPresent)){
                        attendanceCount++;
                        //studentKey = firstName + tab + lastName + tab + className;
                        //attendanceList.put(attendanceCount, studentKey); 
                        System.out.println("attendanceCountIfPresent==" + attendanceCount);
                        model.addRow(new Object[]{array[2], array[1], array[0], attendanceCount, true});


                    }
                }else {
                    if (array[4].equals("Present") && (attendanceCount < totalDaysOrLessStudentsPresent)){
                    attendanceCount = 1;                       
                    System.out.println("attendanceCountIfPresent++=" + attendanceCount);
                    firstName = array[0];
                    lastName = array[1];                   
                    className = array[2];
                    attendance = array[4];
                    model.addRow(new Object[]{array[2], array[1], array[0], attendanceCount, true});
                    studentKey = firstName + tab + lastName + tab + className;
                    attendanceList.put(attendanceCount, studentKey); 

                    }
                    else {
                        attendanceCount = 0;                         
                    }
                }

             //attendanceList.put(attendanceCount, studentKey);   
            }//end while
           for (Map.Entry<Integer, String> entry : attendanceList.entrySet()) {
                studentKey = entry.getValue();
                attendanceCount = entry.getKey();                    
                array = studentKey.split(tab);
                model.addRow(new Object[]{array[2], array[1], array[0], attendanceCount, true});
            }         
        }catch (FileNotFoundException e){
        }
        finally{
        if(scan != null){
           scan.close();
        }
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-11 17:14:42

我不认为我会像你一样使用HashMap,如果我这么做了,出席人数肯定会使用而不是作为地图的关键字段。所有这一切将确保只有一个学生的出席人数是输入到集合。创建一个学生类,为它提供所需的字段,包括名称,可能是studentId,还有attendanceCount,并创建一个集合,可能是一个ArrayList<Student>。然后,如果要对其进行排序,可以使用排序attendanceCount值的比较器,或者如果要筛选它,则可以使用相同字段的值对其进行筛选。

另外,我会让我的学生类覆盖等于和hashCode,并为这些方法使用不变字段,而且最明确的是,考勤字段。如果学生已经存在于ArrayList中,通过在列表中调用contains(student),那么我将增加该学生的出勤率。否则我会在名单上增加一个新学生。

如果您必须使用HashMap,那么您将反转您的键和值字段,即将其作为一个HashMap<Student, Integer>,其中的值是出勤计数。同样,要想工作,学生需要使用这些方法中的一个或多个字段(如hashCode )重写它的等于和studentID方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42183064

复制
相关文章
让DNS运行在容器中
在这里主要使用的容器的镜像是基于bind的,在其中封装了图形界面,从而可以在界面上直接进行配置相关的参数。
SRE运维实践
2019/07/08
7610
运行在 macOS 中的 Linux —— multipass 方案
注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
宋天伦
2023/10/21
3420
运行在 macOS 中的 Linux —— OrbStack 方案
OrbStack) 是在 macOS 上运行 Docker 容器和 Linux 机器的快速、轻量级和简单的方式。它是一个超级充电版 WSL 和 Docker 桌面替代品,所有这些都在一个易于使用的应用程序中实现。
宋天伦
2023/10/21
2.2K0
运行在“Ring -3” 的 MINIX
你可能不知道,但是在你的英特尔系统里,除了你的主操作系统之外,还有一个操作系统在运行,这就是 MINIX。
py3study
2020/01/14
4860
NET MVC接口服务如何运行在容器中
  有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。 
欢醉
2023/03/01
1K0
NET MVC接口服务如何运行在容器中
有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。
欢醉
2023/02/20
1.2K0
运维安全中的“福尔摩斯”
引 言 随着互联网技术的发展,信息的交互越来越频繁,随之而来信息的安全、运维操作的合规性等等问题越来越多,其对于企业内部管理来说要求越来越高。2015年某某网宕机事件,由于内部人员的越权操作,导致该网及APP全线瘫痪约12小时,直接损失近1200万美元;2016年,杭州男子曹某某,利用工作用的运维账号,窃取浙60万学生信息贩卖给他人。 其实,我们的一些客户在使用堡垒机的过程中,可能也会碰到类似的事件,并且都通过堡垒机找到了相关的作案人员,下面我们分享三个发生过的案例 案例一 误操作导致主机异常 某政务网客
安恒信息
2018/04/10
1.5K0
运维安全中的“福尔摩斯”
运维中的接入管理梳理
数据库层的接入可以提炼出DAO层,通过工厂模式来提供灵活的配置接入,这会是一个通用的接口,同时其他数据库的接入也可以通过这种方式带来接入,提炼的结果就是对于数据库类型和接入方式,即可完成数据库的接入管理,比如MySQL,我只需要输入mysql.mysqldb的方式即可通过mysqldb库的方式接入MySQL
jeanron100
2018/07/26
1.5K0
运维中的接入管理梳理
.NET - Task.Run vs Task.Factory.StartNew
在 .NET 4 中,Task.Factory.StartNew 是安排新任务的首选方法。它有许多重载提供了高度可配置的机制,通过启用设置选项,可以传递任意状态、启用取消,甚至控制调度行为。所有这些功能的另一面是复杂性。您需要知道什么时候使用哪个重载、提供什么调度程序等等。另外,Task.Factory.StartNew 用起来并不直截干脆,至少对于它的一些使用场景来说还不够快,比如它的主要使用场景——轻松地将工作交付到后台处理线程。
独立观察员
2022/12/06
4280
C# Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。可以认为 Task.Run 是简化的 Task.Factory.StartNew 的使用,除了需要指定一个线程是长时间占用的,否则就使用 Task.Run。
zls365
2021/01/13
1.3K0
Task.Run 和 Task.Factory.StartNew 区别——c#
Task.Run 是在 dotnet framework 4.5 之后才可以使用, Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制。
vv彭
2021/01/06
1.4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
Python 作为当前机器学习中使用最多的一门编程语言,有很多对应的机器学习库,最常用的莫过于 scikit-learn 了。我们介绍下如何使用sklearn进行实时预测。先来看下典型的机器学习工作流。
abs_zero
2018/07/25
4K0
如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
从信息化时代到互联网时代,再到如今大幕初启的数字化时代,IT、互联网和移动化已经渗透到工作和生活的方方面面。今年早些时候一群歪果仁评选出中国的新“四大发明”——高铁、网购、支付宝和共享单车,后三样都是来自于IT变革。而运维作为IT运行的有力保障,在不同时期和不同类型的企业中正在发挥着越来越大的支撑和引领作用,今天就让我们聊聊信息化时代的传统运维、互联网时代的互联网运维和数字化时代的业务运维有什么不同!
智能运维圈
2021/05/11
3.5K0
IT运维发展进程中不同时期的差异!传统运维、互联网运维、业务运维
linux中iostat命令_linux运维和网络运维
Linux系统中的iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
全栈程序员站长
2022/11/08
9.7K0
linux运维中的命令梳理(三)
----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数
洗尽了浮华
2018/01/23
8.1K0
linux运维中的命令梳理(一)
在linux日常运维中,我们平时会用到很多常规的操作命令。 ------------------------------------------------------- 在修改文件后,执行下面操作进行代码提交到git: git add . git status #查看修改了哪些文件信息 git commit -m "edit message"
洗尽了浮华
2018/01/23
7.5K0
linux运维中的命令梳理(四)
----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续; (2) top:如果想对进程运行时间监控,应该用 top 命令; (3) kill 用于杀死进程或者给进程发送信号; (4) 查看文章最后的man手册,可以查看ps的每项输出的含义,to find: STANDARD FORMAT SPE
洗尽了浮华
2018/01/23
11.5K0
linux运维中的命令梳理(二)
回想起来,从事linux运维工作已近5年之久了,日常工作中会用到很多常规命令,之前简单罗列了一些命令:http://www.cnblogs.com/kevingrace/p/5985486.html 今天在这里,详细总结下运维工作中常常用到的一些操作命令(依据本人使用经验而言): ----------文件系统结构和基本操作命令---------- chmod命令:改变权限 常用用法:chmod -R xxxx FILE 含义:设置文件或者目录的权限属性,加上R选项,表示递归设置目录下文件和目录的权限属性 上
洗尽了浮华
2018/01/23
5.6K0
linux运维中的命令梳理(二)
Rails框架流行在他的设计理念
这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念: 1、make simple thing easy and make complex possible -让简单的事情变的容易,同时让复杂的事情的实现成为可能。 2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic,还有微软ASP.NET Team正在做的
张善友
2018/01/30
2K0
点击加载更多

相似问题

在XSL :apply-模板中使用xsl变量作为Xpath值

11

xsl:apply-模板正确放置

10

xsl:template /xsl:apply-模板移除子节点

11

xsl apply-转换后递归地使用模板

13

xsl:apply-模板中的select属性

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文