WordCount第四周作业

一.基础功能

1. Github地址:https://github.com/huangjianmin/wcPro/

2.PSP表格

PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 10  15

· Estimate

· 估计这个任务需要多少时间

 10  10

Development

开发

 20  25

· Analysis

· 需求分析 (包括学习新技术)

 20  20

· Design Spec

· 生成设计文档

 20  10

· Design Review

· 设计复审 (和同事审核设计文档)

 10  0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

15  15 

· Design

· 具体设计

 60  45

· Coding

· 具体编码

 180  185

· Code Review

· 代码复审

 60  40

· Test

· 测试(自我测试,修改代码,提交修改)

 60  50

Reporting

报告

 30  30

· Test Report

· 测试报告

 30  40

· Size Measurement

· 计算工作量

 10  15

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 30  30
 

合计

 565  550

3.描述代码设计思路

     这次小组作业我们分了四个模块,分别是输入,核心,输出,main函数整合。我做的模块是输出模块。我按照作业要求仔细地分析了输出模块的需求和功能:1.仅输出单词词频从高到低前100个,因此需要写一个判断,当单词数量少于100个时,按照单词实际数量输出,如果单词数量多于100个时,只输出前100个单词。2.每行分别给出一个单词及其词频,这就需要做两个数组,一个显示单词,另一个显示单词词频。3.单词按小写形式给出,需要将含有大写字母的单词进行转换,转换成对应的小写字母。4.对于单词词频相同的情况,按照单词所包含的每个字母从a到z的次序依次排列,这就需要对每个单词的每个字母的ascll码进行逐位比较,然后进行排序。

     输出模块是在wcoutput类中用一个函数output(String[] word,int[] wordFreq)实现的,函数的两个参数是两个数组,一个数组是存储单词的,另一个数组是存储单词频率的,传入的数组是待处理的,先判断两个数组里元素的个数是否相等,不相等则报错;相等的话,继续规格化处理,将单词和词频

4.代码及测试用例设计

public static void output(String[] word,int[] wordFreq) 
    {
        String Uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String lowercase = "abcdefghijklmnopqrstuvwxyz";
        char arr[]= new char[100];
        String newword = "";//更新大小写后的单词
        int out;
        int ascll;
        int length;
        int serial=0;
         try
         {
          if(word.length!=wordFreq.length)
                    System.out.println("Error handle!");
          else 
          {
         
         //向默认文件"result.txt"中输出信息
         FileOutputStream fs =new FileOutputStream(new File("result.txt"));
         PrintStream p =new PrintStream(fs);
         //输出数组元素个数大于100时只输出前100个
         if(wordFreq.length>100) out=100;
         //否则按实际个数输出
         else out = wordFreq.length;
         for(int i=0;i<word.length;i++)
         {
             newword = "";
             for(int j=0;j<word[i].length();j++)
             {
                 ascll=word[i].charAt(j);//把字符转换成对于的Ascll码
                 //如果是大写转换成小写
                 if(Uppercase.indexOf(ascll)!=-1)
                 {
                  arr[j]=lowercase.charAt(Uppercase.indexOf(ascll));
                  newword +=arr[j];
                 }
                 //如果是小写或其它字符则保持不变
                 else
                 {
                     arr[j]=word[i].charAt(j);
                     newword +=arr[j];
                 }
             }
             word[i]=newword;//重置数组里的每个单词
         }
         //词频相等时排序处理    
         String temp = "";
         for(int i=0;i<wordFreq.length;i++)
             for(int j=i+1;j<wordFreq.length;j++)
             {
                 //在比较的两个单词中取最短的长度
                 if(word[i].length()<word[j].length()) length = word[i].length();
                 else length = word[j].length();
                 //词频相等时进行排序
                 if(wordFreq[i]==wordFreq[j])
                 {
                     for(;serial<length;serial++)//单词一位一位比较
                     {
                         //当前一个单词的某位字母小于后一个单词的对应位字母时,不改变原顺序
                         if(word[i].charAt(serial)<word[j].charAt(serial))
                             break;
                         //当前一个单词的某位字母等于后一个单词的对应位字母时,继续比较下一位字母
                         else if(word[i].charAt(serial)==word[j].charAt(serial))
                             continue;
                         //当前一个单词的某位字母大于后一个单词的对应位字母时,交换两个单词的顺序
                         else if(word[i].charAt(serial)>word[j].charAt(serial))
                         {
                             temp = word[i];
                             word[i]=word[j];
                             word[j]=temp;
                             break;
                         }
                     }
                     
                     //当某一个单词里的字母已经比较完了仍没有结果
                     if(serial==length)
                     {
                         if(word[i].length()<word[j].length()) ;
                         //单词长的放后面
                         else 
                         {
                             temp = word[i];
                             word[i]=word[j];
                             word[j]=temp;
                         }
                     }
                     serial=0;
                 }
                 
                //词频不等时打破内层循环(该单词不会再与后面单词相等),从外层循环继续
                 else break;
             }
         //最后的输出
        for(int i=0;i<out;i++)
        {
            System.out.println(word[i]+" "+wordFreq[i]);
            p.println(word[i]+" "+wordFreq[i]);
        }
      }
    }
         catch(IOException e) 
         {
                return;
         }
    }

 

5.任务总结

该次任务是由小组共同完成,本身任务对我而言是有些困难的,但是在队友的帮助下,我们仍然完成了绝大多数。从中我体会到了团队的力量,在团队的合作共进下才能更好的完成各项任务。

 

posted @ 2018-04-08 23:55  !champion!  阅读(180)  评论(1编辑  收藏  举报