Java 笔试题的算法题之io编程(一)

题目:刷卡记录:名字-金钱    读取并找出刷卡次数最多,单笔消费最多


代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;


//刷卡记录:名字-金钱    读取并找出刷卡次数最多,单笔消费最多

public class IoTest {
    
	public static void main(String[] args) {
		
		FileReader fr =null;
		BufferedReader br= null;
		ArrayList<Node> al = new ArrayList<Node>();
		HashSet<String> set = new HashSet<String>();
		HashMap<String, Integer> map = new HashMap<String, Integer>();
       try {
		     fr = new FileReader("d://test.txt");
    	     br = new BufferedReader(fr);
    	     String n = "";
    	     //readLine 如果到流末尾则会返回null
    	     while ((n=br.readLine())!=null)
    	     {
    	    	 //封装成类
    	    	 String node[] =n.split("-");
    	    	 Node node1 = new Node(node[0], Float.parseFloat(node[1]));
    	    	 set.add(node[0]);
    	    	 al.add(node1);
    	    	// System.out.println(node1.name);
    	     }
    	     
    	     //找出单笔最大花费的人
    	     String maxName = "";
    	     for (int i =1;i<al.size();i++)
    	     {
    	    	 Node node = al.get(i);
    	    	 
    	    	 if(node.cost>al.get(i-1).cost)
    	    	 {
    	    		 maxName = node.name;
    	    	 }
    	     }
    	     System.out.println("单笔花费最多的人是:"+maxName);
    	     
    	  /* for(int i=0;i<al.size();i++)
    	   {
    		   System.out.println(al.get(i).name+"  "+al.get(i).cost);
    	   }*/
    	       
    	     
    	      //遍历set得到各个人的刷卡次数,保存到map中
    	      Iterator<String> iter = set.iterator();
    	       
    	      while (iter.hasNext()) {
    	        String name = (String) iter.next();
    	        
    	        int count =0;
    	        for(int i =0;i<al.size();i++)
    	        {   
    	    
    	        	if(al.get(i).name.equals(name))
    	        	{
    	        		count++;
    	        	}
    	        	
    	        }
    	        map.put(name, count);
    	        
                  
    	   }
    	    
    	    //遍历map得到每个人的刷卡次数
    	    Iterator iter2 = map.keySet().iterator();
  	        while(iter2.hasNext())
  	        {
  	        	String name2 =(String) iter2.next();
  	        	int count = map.get(name2);
  	        	System.out.println(name2+"  次数: "+count);
  	        }
	} catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
       //关闭文件
       finally{
    	   try {
		   br.close();
    	   fr.close();
		} catch (Exception e2) {
			// TODO: handle exception
			e2.printStackTrace();
		}
    	
       }
	}
 
}

//信息记录类
class Node{
	String name;
	float cost;
	public Node(String name ,float cost)
	{
		this.cost=cost;
		this.name= name;
	}
}


java笔试题算法 目录 :envelope: 说明 项目介绍 该文档主要是笔主在学习 Java 的过程中的一些学习笔记,但是为了能够涉及到大部分后端学习所需的技术知识点我也会偶尔引用一些别人的优秀文章的链接。文档大部分内容都是笔者参考书籍以及自己的原创。少部分面试回答参考了其他人已有答案,上面都已注明。 该文档涉及的主要内容包括: Java、 数据结构与算法、计算机网络与数据通信、 操作系统、主流框架、数据存储、架构、面试必备知识点等等。相信不论你是前端还是后端都能在这份文档中收获到东西。 关于转载 如果需要引用到本仓库的一些东西,必须注明转载地址!!!毕竟大多都是手敲的,或者引用的是我的原创文章,希望大家尊重一下作者的劳动:grinning_face_with_big_eyes::grinning_face_with_big_eyes::grinning_face_with_big_eyes:! 如何对该开源文档进行贡献 笔记内容大多是手敲,所以难免会有笔误,你可以帮我找错别字。 很多知识点我可能没有涉及到,所以你可以对其他知识点进行补充。 现有的知识点难免存在不完善或者错误,所以你可以对已有知识点的修改/补充。 为什么要做这个开源文档? 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫:grinning_face_with_smiling_eyes:)。所以,我决定通
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值