软工16作业2

作业1

Task1:码云项目地址

地址:https://gitee.com/LinDaDaDa/201621123012

Task2:PSP表格

PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
Planning 计划 20 30
Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 15 25
Development 开发 200 250
Analysis 需求分析 (包括学习新技术) 30 40
Design Spec 生成设计文档 10 20
Design Review 设计复审 20 40
Coding Standard 代码规范 40 30
Design 具体设计 20 40
Coding 具体编码 30 40
Code Review 代码复审 20 50
Test 测试(自我测试,修改代码,提交修改) 40 30
Reporting 报告 20 40
测试报告 15 25
计算工作量 15 30
并提出过程改进计划 50 30

Task3:解题思路描述

  • 1.首先看到此次要求时便得知了需要动用到文件的读取,此时我就选择自己较为擅长的java
  • 2.由于输出都是需要小写的,所以我先把文件中的大写字符转换成小写 if(Character.isUpperCase(line.charAt(i))) Character.toLowerCase(line.charAt(i));;
  • 3.统计字符数的话就每行统计一次最后相加起来就是总字符数
    1. 然后根据频率的话肯定得用到索引排序MAP肯定最为合适

Task4:设计实现和关键代码

1.大写字符变小写和统计字符数

				for(int i=0;i<=line.length()-1;i++)
				{
				 	if(Character.isUpperCase(line.charAt(i))) //对大写字母的判断
				    	Character.toLowerCase(line.charAt(i));
				 	
				 	
					
				}
				wordcount+=line.length();//字符数统计
				linecount ++;//行数统计

2.有效单词数(运用的是正则表达式)

 for(String words:text)
			{
				String[] word = words.split("[^a-zA-Z0-9]"); 
				
				for(String pp:word)
				{
					 String regex ="^[a-z]{4}[a-z0-9]*$";
					 if(pp.matches(regex)==true){
						 text2.add(pp);
					 }
				}
			}
          return text2.size();

3.频率最高的10个单词(方法中返回的也是map)

 Map<String, Integer> map = new TreeMap<String, Integer>();
			for(String word:text2)
			 {if(map.get(word) != null){ 
	                map.put(word,map.get(word) + 1);  
	            }else{  
	                map.put(word,1);  
	            }  
	  
			 }//统计
			
			 List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(  
		             map.entrySet());  
			 List<Map.Entry<String, Integer>> infoIds1 = new ArrayList<Map.Entry<String, Integer>>(  
		             map.entrySet());  
		     Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {  
		         public int compare(Map.Entry<String, Integer> o1,  
		                 Map.Entry<String, Integer> o2) {  
		             return ( o2.getValue()-o1.getValue());  
		         }  
		     });  //比较器
		     System.out.println("--------------排序后--------------");  
		     for (int i = 0; i < infoIds.size(); i++) {  
		    	 Entry<String,Integer> ent=infoIds.get(i);  
		    	 if(i<=9){
		    		 infoIds1.add(ent);
		         System.out.println(ent.getKey()+":"+ent.getValue());
		    	 }
		       
	}
			return infoIds1;

Task5:代码测试截图

Task6:单元测试

	@Test
	public void testWordnumber() {
		assertEquals(0, jiekou.wordnumber("C:/Users/Administrator/Desktop/c1.txt"));//空文件
		assertEquals(14, jiekou.wordnumber("C:/Users/Administrator/Desktop/c2.txt"));//14个单词的纯英文
		assertEquals(160, jiekou.wordnumber("C:/Users/Administrator/Desktop/c3.txt"));//160个单词的英文数字混合
	}

public void testbytenumber() {
		
		assertEquals(0, jiekou.bytenumber("C:/Users/Administrator/Desktop/c1.txt"));
		assertEquals(136, jiekou.bytenumber("C:/Users/Administrator/Desktop/c2.txt"));
		assertEquals(1505, jiekou.bytenumber("C:/Users/Administrator/Desktop/c3.txt"));
		jiekou.out("C:/Users/Administrator/Desktop/c3.txt");
	}
   

Task7:git提交代码

Task8:效能分析

Task9:心得体会

初步了解了对java代码进行测试,刚开始由于geichars有大小限定导致大文件出错,就改用了charAT。之前写代码只注重于功能实现,现在发现了还有效率上的优化,对软件工程有了新一步的认识。

posted on 2018-09-17 21:38  骚的一批  阅读(176)  评论(2编辑  收藏  举报

导航