Code Guideline Test 的一点点总结1
2012-07-25 14:42
281 查看
这两天在公司进行代码规范培训中,写了三个题目,一个是拆分字符串,一个是在本地目录下删除指定的目录,还有一个是阶乘。
先说拆分字符串题目看似很简单,但是在写的时候不然,一个方法不是说写出来就可以了,它要通过专门人的测试之后,才能说写好,就这道题说,写一个方法,给它一个字符串参数和字符,然后根据这个字符来拆分这个字符串,这样写的代码问题很多。如下面这个写法
public void spliteString(String str, ArrayList<String> list, char ch) {
int index = 0;
int first = 0;
int count = 1;
while (true) {
index = str.indexOf(ch, first);
if (index == -1) {
if (count == 1) {
list.add(str);
}
break;
} else {
String tempStr = str.substring(first, index);
if (!tempStr.trim().equals("")) {
list.add(tempStr.trim());
}
count++;
}
index++;
first = index;
}
}
上面的方法确实是拆分字符串的,并且如果给它一个字符串和字符可以正确的拆分字符串的,但是往往我们用这个方法的时候,不一定给的就是一个正确的字符串,或者字符,所以在写这个方法的时候,首先要考虑传的参数的正确性。所以下一个方法之前,先要写一个测试函数,把所有可能的情况想出来,再写这个方法,然后测试,这样写出来的方法才会有说服力。如下面的方法,就比上面的好多了。
public void spliteString(String str, ArrayList<String> list, char ch) {
if (ch == '\0') {
assert false : "不能以'\\0'字符拆分字符串!";
} else if (str == null) {
assert false : "拆分字符串不能为null!";
} else if (str == "") {
list = null;
} else {
int index = 0;
int first = 0;
int count = 1;
while (true) {
index = str.indexOf(ch, first);
if (index == -1) {
if (count == 1) {
list.add(str);
}
break;
} else {
String tempStr = str.substring(first, index);
if (!tempStr.trim().equals("")) {
list.add(tempStr.trim());
}
count++;
}
index++;
first = index;
}
}
}
然后再通过一下的测试用例进行测试,
spliteString("shaoshanyang", list, '@');
spliteString("shao@shan@yang", list, '@');
spliteString("shao@@shan@yang@zhang", list, '@');
spliteString("shao@ shan @yang zh@ang", list, '@');
spliteString("@shaoshan@yang", list, '@');
spliteString("shaoshan@yang@", list, '@');
spliteString("@@", list, '@');
spliteString("", list, '@');
spliteString(null, list, '@');
spliteString("zhong guo shou du", list, '\0');
代码规范要求:1,多行注释,要另起一行,并且注释和前一行之间要空一行
2,if else语句结构要尽量的少,不用嵌套太多。
3,代码不要写的太紧凑,比如 a=3应该写a = 3。
4,return语句要尽量少,争取在最后写一个returne语句
先说拆分字符串题目看似很简单,但是在写的时候不然,一个方法不是说写出来就可以了,它要通过专门人的测试之后,才能说写好,就这道题说,写一个方法,给它一个字符串参数和字符,然后根据这个字符来拆分这个字符串,这样写的代码问题很多。如下面这个写法
public void spliteString(String str, ArrayList<String> list, char ch) {
int index = 0;
int first = 0;
int count = 1;
while (true) {
index = str.indexOf(ch, first);
if (index == -1) {
if (count == 1) {
list.add(str);
}
break;
} else {
String tempStr = str.substring(first, index);
if (!tempStr.trim().equals("")) {
list.add(tempStr.trim());
}
count++;
}
index++;
first = index;
}
}
上面的方法确实是拆分字符串的,并且如果给它一个字符串和字符可以正确的拆分字符串的,但是往往我们用这个方法的时候,不一定给的就是一个正确的字符串,或者字符,所以在写这个方法的时候,首先要考虑传的参数的正确性。所以下一个方法之前,先要写一个测试函数,把所有可能的情况想出来,再写这个方法,然后测试,这样写出来的方法才会有说服力。如下面的方法,就比上面的好多了。
public void spliteString(String str, ArrayList<String> list, char ch) {
if (ch == '\0') {
assert false : "不能以'\\0'字符拆分字符串!";
} else if (str == null) {
assert false : "拆分字符串不能为null!";
} else if (str == "") {
list = null;
} else {
int index = 0;
int first = 0;
int count = 1;
while (true) {
index = str.indexOf(ch, first);
if (index == -1) {
if (count == 1) {
list.add(str);
}
break;
} else {
String tempStr = str.substring(first, index);
if (!tempStr.trim().equals("")) {
list.add(tempStr.trim());
}
count++;
}
index++;
first = index;
}
}
}
然后再通过一下的测试用例进行测试,
spliteString("shaoshanyang", list, '@');
spliteString("shao@shan@yang", list, '@');
spliteString("shao@@shan@yang@zhang", list, '@');
spliteString("shao@ shan @yang zh@ang", list, '@');
spliteString("@shaoshan@yang", list, '@');
spliteString("shaoshan@yang@", list, '@');
spliteString("@@", list, '@');
spliteString("", list, '@');
spliteString(null, list, '@');
spliteString("zhong guo shou du", list, '\0');
代码规范要求:1,多行注释,要另起一行,并且注释和前一行之间要空一行
2,if else语句结构要尽量的少,不用嵌套太多。
3,代码不要写的太紧凑,比如 a=3应该写a = 3。
4,return语句要尽量少,争取在最后写一个returne语句
相关文章推荐
- 学习HTTP StatusCode的一些总结
- VS Code 使用总结
- 真机测试及布署Code Sign error问题总结
- Educational Codeforces Round 21总结
- AndroidSpinnerTest总结
- Educational Codeforces Round 20总结
- leecode 解题总结:363. Max Sum of Rectangle No Larger Than K
- 【题解】2015编程之美资格赛 CodeHunt C#满分参考与总结
- leecode 解题总结:60. Permutation Sequence
- harrychinese 刘忠武面朝大海, 春暖花开我的开源http://anydbtest.codeplex.com
- 关于最近做项目的一点点总结
- Spring Test 整合 JUnit 4 使用总结
- leecode 解题总结:84. Largest Rectangle in Histogram
- leedcode做题总结,题目Binary Tree Preorder Traversal 2013/11/05
- mac命令行下使用xcodebuild编译ios app的一点点总结
- Spring Test 整合 JUnit 4 使用总结
- test of code
- leecode 解题总结:105. Construct Binary Tree from Preorder and Inorder Traversal
- leecode 解题总结:111. Minimum Depth of Binary Tree
- leecode 解题总结:122. Best Time to Buy and Sell Stock II