今天在群里又有一个朋友问到了这样一个练习,我索性将代码贴到这里,下次须要的朋友能够来这里看。

用到知识点:数组、集合、IO流

问题描写叙述:在例如以下图所看到的的一个txt文件里读取数据到内存,然后统计列除过0的各个数字的个数(放入Map)并依照列的数据大小排序。

代码:

  1. package com.test;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.IOException;
  8. import java.util.ArrayList;
  9. import java.util.Comparator;
  10. import java.util.List;
  11. import java.util.TreeMap;
  12.  
  13. public class Week {
  14. private static List<int[]> readFile1(String fileName) {
  15. List<int[]> list = new ArrayList<int[]>();
  16. String line = "";
  17. int[] arr;
  18. FileReader fr = null;
  19. BufferedReader br = null;
  20. try {
  21. File file = new File(fileName);
  22. fr = new FileReader(file);
  23. br = new BufferedReader(fr);
  24. while (br.ready()) {
  25. line = br.readLine();
  26. String[] data = line.split(",");
  27. arr = new int[data.length];
  28. for (int j = 0; j < data.length; j++) {
  29. arr[j] = Integer.parseInt(data[j]);
  30. }
  31. list.add(arr);
  32. }
  33. } catch (FileNotFoundException e) {
  34. e.printStackTrace();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. } finally{
  38. if(br != null){
  39. try {
  40. br.close();
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. if(fr != null){
  46. try {
  47. fr.close();
  48. } catch (IOException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }
  53. return list;
  54. }
  55.  
  56. private static int[][] revertData(List<int[]> data) {
  57. int maxCol = 0;
  58. for (int i = 0; i < data.size(); i++) {
  59. if (data.get(i).length > maxCol) {
  60. maxCol = data.get(i).length;
  61. }
  62. }
  63.  
  64. int[][] arrs = new int[maxCol][data.size()];
  65. for (int i = 0; i < data.size(); i++) {
  66. int[] arr = data.get(i);
  67. for (int j = 0; j < arr.length; j++) {
  68. arrs[j][i] = arr[j];
  69. }
  70. }
  71. return arrs;
  72. }
  73.  
  74. private static void countKeyNum(int[][] arrs) {
  75. TreeMap<Integer, Integer> map;
  76. for (int i = 0; i < arrs.length; i++) {
  77. map = new TreeMap<Integer, Integer>(new Comparator<Integer>() {
  78.  
  79. @Override
  80. public int compare(Integer o1, Integer o2) {
  81. return o1.compareTo(o2);
  82. }
  83. });
  84. for (int j = 0; j < arrs[i].length; j++) {
  85. if (arrs[i][j] == 0)
  86. continue;
  87. if (map.containsKey(arrs[i][j])) {
  88. map.put(arrs[i][j], map.get(arrs[i][j]) + 1);
  89. } else {
  90. map.put(arrs[i][j], 1);
  91. }
  92. }
  93. System.out.println(map);
  94. }
  95. }
  96.  
  97. public static void main(String args[]) {
  98. List<int[]> data = readFile1("week.txt");
  99. int[][] arrs = revertData(data);
  100. countKeyNum(arrs);
  101. }
  102.  
  103. }

部分执行结果:

一个Java基础练习的更多相关文章

  1. 一天一个Java基础——泛型

    这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲 ...

  2. 一天一个Java基础——通过异常处理错误

    <Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 package Exception; class SimpleExc ...

  3. 一天一个Java基础——数组

    一天一个变成了几天一个,最近接受的新东西太多.太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛. 数组: JVM将数组存储在一个称为堆(he ...

  4. 一天一个Java基础——对象和类

    1.在Java中你所做的全部工作就是定义类,产生那些类的对象,以及发送消息给这些对象 2.可以在类中设置两种类型的元素:字段(也被称作数据成员)和方法(也被称作成员函数) 3.字段可以是任何类型的对象 ...

  5. 一天一个Java基础——序列化

    1.概念 Java的“对象序列化”能将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象的时候,能把这些byte数据恢复出来,并据此重新构建那个对象. 对象序列化能实 ...

  6. 一天一个Java基础——反射

    1.概念 反射主要是指程序可以访问,检测和修改它本身的状态或行为的一种能力 Java中的反射是一种强大的工具,它能够创建灵活的代码,这些代码可以运行时装配,无须在组件之间进行链接 反射允许在编写与执行 ...

  7. 每天一个java基础知识--static

    内存总体一共分为了 4个部分(stack segment.heap segment.code segment.data segment) 当我们在程序中,申明一个局部变量的时候,此变量就存放在了 st ...

  8. 一天一个Java基础——排序

    插入排序 直接插入排序: 当插入第i个数据元素k时,由前i-1个数据元素组成已排序的数据序列,将k与数据序列中各数据元素依次进行比较后,插入到数据序列的适当位置,使得插入后的数据序列仍是排序的. 直接 ...

  9. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

随机推荐

  1. spring-data-redis 使用过程中需要注意的地方

    1.序列化问题 <!-- SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略. StringRedisTemplate默认采用的是String的序列化策略 ...

  2. 最简单的TCP程序

    网络编程里面最简单的一个tcp程序,把一个文件从客户端上传到服务器端,上传成功后服务器端提示上传完成.代码不多,一个服务端和一个客户端. 服务端代码: import java.io.FileOutpu ...

  3. RMAN备份脚本

      单机环境全备   export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORA ...

  4. MD5工具类-详细

    public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...

  5. kubernetes学习与实践篇(一)主要概念介绍

    什么是kubernetes Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器. 主要功能 将多台 ...

  6. linux指令快速复制粘贴[龟速更新中]

    由于有经常碰到要输入linux指令,但是却忘记了的情况.在家里我把常用的命令放到Xshell的快速命令集,但是在很多情况下不在家,可能用的他人电脑,以及在非Win环境下使用ssh时没有xshell使用 ...

  7. 一:1.1 python程序与数据储存【进制转换】

    二进制 :0 1 [逢二进一]0+0=00+1=11+1=1011+1=100 1 1+ 1------ 100 八进制: 0 1 2 3 4 5 6 7 [逢八进一] 1+7=101+2=3 十进制 ...

  8. COGS——T 1215. [Tyvj Aug11] 冗余电网

    http://www.cogs.pro/cogs/problem/problem.php?pid=1215 ★   输入文件:ugrid.in   输出文件:ugrid.out   简单对比时间限制: ...

  9. 网络载入数据和解析JSON格式数据案例之空气质量监測应用

    一.创建一个新的项目 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  10. Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!

     我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...