目的:
(1)一门语言入门,需要编写至少2万行代码。那么,我们编写一个计算代码行数的程序,激励自己前行。
(2)了解代码复用、重构的作用。
目标(递进关系,难度从小到大):
目标1:给定一个源代码文件(.cs, .java),输出该文件的总行数、空行数、注释行数、代码行数。
目标2:从命令行输入一个参数(指定目录或文件),输出该目录下指定类型文件(.cs, .java)的个数、每个文件的总行数、空行数、注释行数、代码行数。
目标3:从命令行输入两个参数(第一个参数:指定目录或文件;第二个参数:指定类型文件),输出该目录下指定类型文件的个数、每个文件的总行数、空行数、注释行数、代码行数。
计分方式(补充-新):
(1)完成 目标1,程序能够运行,并得到结果,计80分;
(2)完成 目标2,程序能够运行,并得到结果,计90分;
(3)完成 目标3,程序能够运行,并得到结果,计100分;
互评同学,可以根据自己的理解,上下浮动10分。比如 注释很完整、代码很精炼,则加分。完成多个目标,则只计算分值最高的作为本次作业的分数。
方法与步骤(参考,以目标1为例):
(1)解读题意:要得到什么结果?脑海中模拟其过程——给定一个文件后,自己数一下总行数、空行数等。
(2)目标分解:大概有哪几个核心步骤?——打开一个文件;读取文件的一行;判断此行的类型;文件结尾的判断;结果输出(输出到屏幕,or 输出到文件)。
(3)代码编写:没有学过写代码(java,or cs),baidu or google搜索。——搜什么呢?怎样提问呢?(C#统计c、c++、C#代码行数)哪些网站的内容可能更值得信赖?(程序员需要知道的N个网站)
(4)调试与测试:我们的代码有错误吗?调试与测试见功底。——测试工程师的工作。如果输入的文件名不存在怎么办?存在但不是指定类型的文件怎么判断?……
(5)总结与提高:有哪些经验与不足?写下来,一方面提醒自己;另一方面,分享到博客中,也帮助其他人。比如:遇到过哪些问题,是怎样解决的?命令行方式好不好,修改成有界面的版本,代码重写的多吗?是否可以尝试一下呢?
(1)完成 目标1,程序能够运行,并得到结果,计80分;
package iotest; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class StaticsCodeingLine { private static int whiteLines = 0; private static int commentLines = 0; private static int normalLines = 0; /** * @param args */ public static void main(String[] args) { File f = new File("C:\\Users\\Administrator\\Workspaces\\MyEclipse 8.5\\TYH\\src\\iotest\\StaticsCodeingLine.java");//注意路径 sumCode(f); } private static void sumCode(File file) { BufferedReader br = null; boolean comment = false; try { br = new BufferedReader(new FileReader(file)); String line = ""; try { while ((line = br.readLine()) != null) { line = line.trim(); if (line.matches("^[\\s&&[^\\n]]*$")) { whiteLines++; } else if (line.startsWith("/*") && !line.endsWith("*/")) { commentLines++; comment = true; } else if (true == comment) { commentLines++; if (line.endsWith("*/")) { comment = false; } } else if (line.startsWith("//")) { commentLines++; } else { normalLines++; } } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (br != null) { try { System.out.println("空行数:"+whiteLines); System.out.println("注释行数:"+commentLines); System.out.println("代码行数:"+normalLines); br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } } }