java实现年休功能_wc作业的JAVA实现

(PSP表格在最后给出)

项目相关要求

1.基本功能

-c,统计文件的字符数(完成)

-w,统计文件的词的数目(完成)

-l,统计文件的行数(完成)

2.拓展功能

-s,递归处理目录下符合条件的文件(未完成)

-a,返回更复杂的数据(代码行 / 空行 / 注释行)(未完成)

解题思路

WC这个项目主要有两个部分组成:

1.有关基本功能的实现设计;

2.读取测试文件;

基本功能的实现设计比较简单,如果用Java的角度,用read的方式按字符读取文件内容。

字符数:读取的过程中,空格键字符数+1,回车键字符数+2,所以要去除掉这两个才能计算出不计空格和回车的字符数;

行数:以回车数+1就能统计文件的总行数;

单词数:通过判断前后是否有空格来统计单词的数目。

文件读取这个方面比较难,因为我对java的输入流不太熟悉,上网查资料查到可以用文件或者路径的方式来读取文件,因为只用文件方式有几率会找不到该文件,所以我就只用读取路径的方式来打开文件。

设计

testcount类:

变量:chars, words, lines.   基本功能的表示。

方法:calculate                               基本功能的实现方法。

switch(arr[0])                    对功能进行分类并打印输出结果。

主要流程:用文件输入流一个字符一个字符读取文件,以判断当前读取位置是否为文本末尾为结束条件进行循环,计算chars,words,lines。然后在主类设计读取文件路径的方法,并对功能进行分类实现。读取路径用split(“\\s”)的方法来表达。

关键代码

1.实现基本功能

1 public static int words = 1;2 public static int lines = 1;3 public static int chars = 0;4 public static int space = 0;5

6

7

8 public static void calculate(String s) throwsIOException {9 FileInputStream f = newFileInputStream(s);10 //根据前后空格来判断是否为单词

11 boolean notblank = false;12 String blank = " \t\n\r";13 intc;14 while ((c = f.read()) != -1) {15 chars++;16 if(c == '\n') lines++;//计算行数

17 if(c == ' ') space++;18 if(blank.indexOf(c) != -1) {19 if(notblank) {20 words++;21 }22 notblank = false;23 } else{24 notblank = true;25 }26 }if(chars==0) {words=0;lines=0;}//空文件

2.文件读取及功能分类

1 System.out.print("请输入命令:");2 Scanner s = newScanner(System.in);3 String m =s.nextLine();4 String arr[]= m.split("\\s");5

6 //根据获取指令来执行函数

7 try{8 switch (arr[0]){9 //打印输出结果

10 case "-c": textcount.calculate(arr[1]);11 if(chars==0) System.out.println12 ("本文件共有字符数:" + chars);//空文件情况

13 else{14 System.out.println15 ("本文件共有字符数:" + (chars-(lines-1)*2-space));}//不计空格和换行

16 break; //返回文件字符数

17

18 case "-w": textcount.calculate(arr[1]);19 System.out.println("本文件共有单词数:" + words+"\n");20 break; //返回文件单词数目21

22 //空行也计算在内

23 case "-l": textcount.calculate(arr[1]);24 System.out.println("本文件共有行数:" + lines+"\n");25 break; //返回文件行数

26

27 case "-cwl": textcount.calculate(arr[1]);28 if(chars==0) System.out.println("本文件共有字符数:" +chars);29 else{30 System.out.println31 ("本文件共有字符数:" + (chars-(lines-1)*2-space));}32 System.out.println("本文件共有单词数:" +words);33 System.out.println("本文件共有行数:" +lines);34

35 break;36

37 default: System.out.println("\n不存在该指令!"+"\n");break;38 }39 } catch (FileNotFoundException e) {//读取失败

40 System.out.println("\n不存在该文件路径!");41 } catch(IOException e){42 System.out.println("\n文件读取错误!");43 }System.out.println("运行结束,感谢您的使用");break;

测试截图

1.正常测试文件,我一般都会把文件存在自己的d盘。

f0b8bbc5270990c4578e700ee79eae9d.png

2.测试文件2,因为以回车键标准来数行,所以在该测试文件中空白行也算一行。

58b06595c957fb9140788417774b97c2.png

3.空文件

49f529d114d55ca4822e00800b62b132.png

4.只有一个单词的文件,一个字符也算一个单词。

49f625694dfd6c4f017d65f0ae737d23.png  

f3ed436156ed6dfee24b153cdad4a4fc.png

5.随便找了以前做的一个C语言源文件来做测试。

702226e0d2a07437c496aa0dcca9ec11.png

6.文件查找失败。

3830ed062a7b0a45b6390588252c375b.png

遇到的困难及解决方法

1. 在计算字符数的时候在考虑空文件情况的时候结果不是预期的,一开始都是在想判断文件为空这个方式。不过稍微往简单的想空文件就是一开始就到文件末尾,统计的字符数为零,所以根据这个思路补充这个情况:当char为零时,行数和单词书都置为零。

2.因为对Java不熟悉,所以对读取文件路径的方法需要上网查资料,用split的方法来输入文件路径。

3.输入文件名的时候不支持空格,解决方法尚未知。

PSP

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)

Planning

计划

35

45

· Estimate

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

35

45

Development

开发

505

732

· Analysis

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

40

47

· Design Spec

· 生成设计文档

25

0

· Design Review

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

0

0

· Coding Standard

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

30

15

· Design

· 具体设计

40

70

· Coding

· 具体编码

300

540

· Code Review

· 代码复审

20

20

· Test

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

40

40

Reporting

报告

210

180

· Test Report

· 测试报告

150

120

· Size Measurement

· 计算工作量

30

30

· Postmortem & Process Improvement Plan

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

30

30

合计

750

957

经验小结

设计思路方面想的过于简单,只有大致方向,细化方面比预期再花多了一点时间。由于对Java语言不太熟悉,所以即使想到了算法,但是在实现的代码编写方面遇到了很多磕磕绊绊的过程,有时候想了几十分钟还是不知道怎么写。因为想不到更优的语法,所以代码规范方面也没想的太仔细,代码复审也没有花很多的时间。测试方面因为都是一个一个文件路径输进去的,所以稍微花了点时间。通过这次项目设计,让我意识到如果不去回顾编程语言,很久不去实践的话,代码编程的技术会生疏很多,所以还是要不定时的去回顾一下编程语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值