一个Java基础练习

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

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

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

一个Java基础练习_第1张图片

代码:

package com.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeMap;

public class Week {
	private static List<int[]> readFile1(String fileName) {
		List<int[]> list = new ArrayList<int[]>();
		String line = "";
		int[] arr;
		FileReader fr = null;
		BufferedReader br = null;
		try {
			File file = new File(fileName);
			fr = new FileReader(file);
			br = new BufferedReader(fr);
			while (br.ready()) {
				line = br.readLine();
				String[] data = line.split(",");
				arr = new int[data.length];
				for (int j = 0; j < data.length; j++) {
					arr[j] = Integer.parseInt(data[j]);
				}
				list.add(arr);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			if(br != null){
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(fr != null){
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return list;
	}

	private static int[][] revertData(List<int[]> data) {
		int maxCol = 0;
		for (int i = 0; i < data.size(); i++) {
			if (data.get(i).length > maxCol) {
				maxCol = data.get(i).length;
			}
		}

		int[][] arrs = new int[maxCol][data.size()];
		for (int i = 0; i < data.size(); i++) {
			int[] arr = data.get(i);
			for (int j = 0; j < arr.length; j++) {
				arrs[j][i] = arr[j];
			}
		}
		return arrs;
	}

	private static void countKeyNum(int[][] arrs) {
		TreeMap<Integer, Integer> map;
		for (int i = 0; i < arrs.length; i++) {
			map = new TreeMap<Integer, Integer>(new Comparator<Integer>() {

				@Override
				public int compare(Integer o1, Integer o2) {
					return o1.compareTo(o2);
				}
			});
			for (int j = 0; j < arrs[i].length; j++) {
				if (arrs[i][j] == 0)
					continue;
				if (map.containsKey(arrs[i][j])) {
					map.put(arrs[i][j], map.get(arrs[i][j]) + 1);
				} else {
					map.put(arrs[i][j], 1);
				}
			}
			System.out.println(map);
		}
	}

	public static void main(String args[]) {
		List<int[]> data = readFile1("week.txt");
		int[][] arrs = revertData(data);
		countKeyNum(arrs);
	}

}
部分运行结果:

一个Java基础练习_第2张图片



你可能感兴趣的:(java,java基础,集合,IO流)