Java入门学习-实践:手动输入城市名称5次,完成后输出一份city.txt文档,写出被输入最多次的城市名字
来源:互联网 发布:linux ping 大包 编辑:程序博客网 时间:2024/06/06 00:45
一、初始版
import java.awt.MenuComponent;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;public class MostCity { private File f=new File("F:/java/HelloWorld/src/practice/city.txt"); Scanner scanner=new Scanner(System.in); public String maxtimes(ArrayList<String> arrayList){ //求最大次数的方法 HashMap<String,Integer> hm=new HashMap<>(); //建一个Hashmap记录键(String)对应的次数 for(int i=0;i<arrayList.size();i++){ //将每个arraylist put到HashMap中 if(hm.get(arrayList.get(i))!=null) //没加过就置为1,加过就在原始的基础上+1 hm.put(arrayList.get(i), hm.get(arrayList.get(i))+1); else hm.put(arrayList.get(i), 1); } int max=0; Iterator it=hm.entrySet().iterator(); //创建一个迭代器,用于下面找最大值遍历 while(it.hasNext()){ Entry entry=(Entry)it.next(); //百度上说Map.Entry的效率要高一些 if(max<(int)entry.getValue()){ //打擂台法找到最大值 max=(int)entry.getValue(); } } String string="Peking "+max+" times"; return string ; } public void file(ArrayList<String> arrayList){ //建立文件的方法 try { f.createNewFile(); //如果路径不在,就新建一个路径 FileOutputStream fops=new FileOutputStream(f); for(int i=0;i<arrayList.size();i++){ String s=arrayList.get(i)+"\r\n"; //加上换行,没有\r,记事本就不换行 fops.write(s.getBytes()); //写到文件流中 } fops.close(); //关闭流 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getcity(ArrayList<String> arrayList){ //从控制台获取city方法 String string=scanner.nextLine(); arrayList.add(string); //add方法添加到ArrayList中 } public static void main(String[] args) { MostCity mostCity=new MostCity(); //ArrayList< String> arrayList=null; //之前因为写了这句话,没有初始化,所以会抛出空指针异常java.lang.NullPointerException ArrayList< String> arrayList=new ArrayList<String>(); for(int i=0;i<5;i++){ //输入5次 mostCity.getcity(arrayList); } mostCity.file(arrayList); System.out.println(arrayList); System.out.println(mostCity.maxtimes(arrayList)); }}
输入:
北京
上海
广州
北京
拉萨
输出:
[北京, 上海, 广州, 北京, 拉萨]
Peking 2 times
文件写于F:/java/HelloWorld/src/practice/city.txt中
文件内容为:
北京
上海
广州
北京
拉萨
二、修改版
import java.awt.MenuComponent;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Scanner;import java.util.Set;public class MostCity { private File f=new File("F:/java/HelloWorld/src/practice/city.txt"); Scanner scanner=new Scanner(System.in); public void maxtimes(ArrayList<String> arrayList){ //求最大次数的方法 HashMap<String,Integer> hm=new HashMap<>(); //建一个Hashmap记录键(String)对应的次数 for(int i=0;i<arrayList.size();i++){ //将每个arraylist put到HashMap中 if(hm.get(arrayList.get(i))!=null) //没加过就置为1,加过就在原始的基础上+1 hm.put(arrayList.get(i), hm.get(arrayList.get(i))+1); else hm.put(arrayList.get(i), 1); } int max=0; Set<String> maxvalue=new HashSet() ; Iterator it=hm.entrySet().iterator(); //创建一个迭代器,用于下面找最大值遍历 while(it.hasNext()){ Entry entry=(Entry)it.next(); //百度上说Map.Entry的效率要高一些 if(max<(int)entry.getValue()){ //打擂台法找到最大值 max=(int)entry.getValue(); } for(String key:hm.keySet()){ //反向将最大值的所有key找出来,放到set里去重 if(hm.get(key).equals(max)){ maxvalue.add(key); } } } for(String s:maxvalue){ //输出set及最大值 System.out.println(s+" "+max+" times"); } } public void file(ArrayList<String> arrayList){ //建立文件的方法 try { f.createNewFile(); //如果路径不在,就新建一个路径 FileOutputStream fops=new FileOutputStream(f); for(int i=0;i<arrayList.size();i++){ String s=arrayList.get(i)+"\r\n"; //加上换行,没有\r,记事本就不换行 fops.write(s.getBytes()); //写到文件流中 } fops.close(); //关闭流 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void getcity(ArrayList<String> arrayList){ //从控制台获取city方法 String string=scanner.nextLine(); arrayList.add(string); //add方法添加到ArrayList中 } public static void main(String[] args) { MostCity mostCity=new MostCity(); //ArrayList< String> arrayList=null; //之前因为写了这句话,没有初始化,所以会抛出空指针异常java.lang.NullPointerException ArrayList< String> arrayList=new ArrayList<String>(); for(int i=0;i<5;i++){ //输入5次 mostCity.getcity(arrayList); } mostCity.file(arrayList); System.out.println(arrayList); mostCity.maxtimes(arrayList); }}
输入:
北京
上海
广州
深圳
长沙
输出:
[北京, 上海, 广州, 深圳, 长沙]
上海 1 times
广州 1 times
长沙 1 times
北京 1 times
深圳 1 times
————————————————–
输入:
北京
上海
北京
上海
广州
输出:
[北京, 上海, 北京, 上海, 广州]
上海 2 times
北京 2 times
三、再优化
在找最大值的键时,之前使用迭代器遍历,多条一直只输出一条,所以就用了set。今天一看代码,放错位置了,所以写代码时还是要清醒。
重新改了一下这一段
for(String key:hm.keySet()){ //反向将最大值的所有key找出来,放到set里去重 if(hm.get(key).equals(max)){ maxvalue.add(key); } }for(String s:maxvalue){ //输出set及最大值 System.out.println(s+" "+max+" times"); }
改为:
//for循环就要从key遍历。如果从value遍历,则会有多条产生for(String s:hm.keySet()){ if(hm.get(s).equals(max)){ System.out.println(s+" "+max+" times"); } }
0 0
- Java入门学习-实践:手动输入城市名称5次,完成后输出一份city.txt文档,写出被输入最多次的城市名字
- 编写一个程序,可以通过次程序完成一个表的创建操作,输入表的名称,各个列的名称及类型,输入完成后直接通过JDBC创建指定的表。
- 输入5个城市的空气质量 打印空气质量图
- 输入城市名查询未来5天的天气
- (八十九)txt文档的输入和输出
- python 查询天气(输入城市名,输出天气)
- jQuery输入城市查看地图
- 无数次输入打印
- 刘昊威 尊重城市的记忆 CITY MEMORY
- 中国的“智慧城市”非“Smart City”
- 【JZOJ3738】理想城市(city)
- C# 输入汉字省份城市得到相应拼音修正(不是拼音的城市对于英文)
- 二位数组的输入与输出主对角线 与 次对角线
- 输入两个数字,输出小数点后最多200位
- IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息
- 检索最多城市的省sql
- 中国帅哥最多的城市排名
- 《Java的输入/输出》学习笔记
- 深入理解HBase Memstore
- 源码解析---第一个view的绘制流程
- 算法笔记(I) 分类
- 系统学习javaweb-09-javaweb基础增强
- Windows编程_Lesson002_Windows与编程语言
- Java入门学习-实践:手动输入城市名称5次,完成后输出一份city.txt文档,写出被输入最多次的城市名字
- new运算符
- HTML(3)块级元素、内联元素、可变元素
- Git Book读书笔记--git常用命令总结
- JSON解析类库之Gson(7) --- Gson与SpringMVC的整合,利用@ResponseBody返回Json数据
- 安装qt-creator的二进制文件出现不能执行的解决办法
- 使用内网穿透工具frp
- Android网络编程中遇到返回码为302重定向的问题
- SQL经典讲解之SQL Server 2012 安装过程