2006-07-19 星期四 多云
第四天
今天上班的前一个小时在看电脑里遗留的以前项目的需求文档,内容很精彩,还附上了界面的图片。不过一看就是后期补上的正式版本的截图;一个项目大概有20页左右的需求文档和规格说明书,但是我感觉是后补的(看完大家就明白了)
需求文档看的头晕,我们的老大没有出现,也不知道我的内网账号申请的怎么样了;感觉有些闲的无聊,就在电脑上随意搜索,结果发现了大学英语四级词汇表。我的英语不好,所以想抽空背背。可是背了没几个,觉得中英文全写在一行,背起来很不舒服。。。
一位伟人说人和动物的区别是创造和使用工具。我作为一个人类的实例,当然应该继承了这个优秀的接口。所以我开始写一个小程序,把中英文分行。观察了一下,每行的中英文之间都是用空格隔开的;所以这应该是比较容易的。
测试的原则讲究从小到大的确定测试范围,其实编程何尝不是如此呢?
想到把一行拆成两行,手动的方法是按一下回车;所以,首先想到的是用java的String类的字符替换函数replace(old char,new char);于是先基于它写了一个String的字符替换程序。编译通过了,可是当我执行的时候,提示我找不到类?!
有一种想重装操作系统的冲动。。。但是卸载了前人留下的JBuilder后,我想先看看设置。在命令行输入set后,我看见了classpath的设置项。抱着试一试的心态,我把程序所在的路径添加到了classpath中。终于能运行了。。。
可是。。。
分行显示并没有实现。。。
重复编译执行多次,replace还是没有生效。。。这时我想到了String是以回车字符结尾的,或许因此无法在字符串中间加入回车了。。。
只能改变方法了,最简单的可能是用substring,但是也要用for循环去判断charAt(int index)是否为空格,所以直接定义了两个空字符串,分别去接英文和注释,然后显示这两个字符串。这次终于成功了。。。
接下去就是读写文本文件的操作了,起初使用的是while语句,可是这样一来,第一行的词汇被冲掉了。
这时改成do while结构,结果读到结束的时候字符串为空,取长度会报错;于是加上了判断字符串是否为空控制的break语句。后来发现读空文件显示相同的提示,于是将提示修改成两种情况。
CODE:
import java.io.*;
import java.lang.*;
public class Test{
public static void main(String args[]) throws IOException{
FileInputStream fis=new FileInputStream("E:\\"+args[0]+".txt");
BufferedReader buff = new BufferedReader(new InputStreamReader(fis));
int count=0;//统计输入行数
FileWriter fw = new FileWriter("E:\\"+args[0]+args[0]+".txt");
String str1=new String();
do{
if(str1==null){
if (count==0){
System.out.println("打开文件为空");
break;
}
else {
System.out.println("读取文件结束");
break;
}
}
//System.out.println(str1);
String English=new String();
String Chinese=new String();
String Bk="\n";
int flag=0;
for (int i=0;i<str1.length();i++){
char c=str1.charAt(i);
if(c==' '){
flag=1;continue;
}
if(flag==0){
English+=c;
}
else{
Chinese+=c;
}
}
fw.write(Bk,0,Bk.length());
fw.flush();
fw.write(English,0,English.length());
fw.flush();
//System.out.println(English);
fw.write(Bk,0,Bk.length());
fw.flush();
fw.write(Chinese,0,Chinese.length());
fw.flush();
fw.write(Bk,0,Bk.length());
fw.flush();
//System.out.println(Chinese);
count++;
}while((str1=buff.readLine())!=null);
fis.close();
buff.close();
fw.close();
}
}
这样一个简单的东西,由于设计思想的错误,我用了一个多小时才搞好,不由感叹起单元测试对软件工程的重要性。。。等我把全部词汇表转换完毕,已经是是午饭时间了。
午饭归来,可以休息,于是我坐在位子上调整好姿势,闭上了双眼。。。半小时后,我开始背单词。。。
过了很久我才知道,今天老大是来上班的,只是在楼上的保险公司软件部处理上线的事情。既然他日理万机,我就不为自己账号的事情去劳他分心了。。。
难得有机会背了四个小时的单词,似乎找到了语感,得出了文字应该是在语言出现之后出现的结论。。。
快下班的时候,看见几个同事围在一台电脑前处理一个bug,两个开发都认为出现bug的查询功能本身多余。问他们需求文档是怎么样的?他们说文档上就一句话。。。过了一会,开发的老大把生成这个功能的开发叫到跟前,和他说的大意好像是查询的几个条件毫无关联,怎么可能生成正确的查询结果?!如果这是事实,只能有两个可能:1、保险公司的软件架构有问题,几十个表组成的数据库居然有孤立的表存在。2、需求存在重大缺席
看来,尽早和不断的测试对软件质量真的很重要。。。
[ 此贴被无牙老虎在2006-09-22 17:22重新编辑 ]