### 编程原则
- 我的观点是:对于三种标准的结构化编程结构(顺序、选择、迭代)之外的任何控制结构的使用—也就是说,使用break, continue, return, throw–catch—都要持一种批判的态度。
—–Steven McConner
### 计算子程序中决策点的数量的技术:
- 从 1 开始, 一直往下通过程序;
- 一旦遇到以下关键字, 或者同类的词, 就加1:if, while, for, repeat, and, or
- 给case子句中的每一种情况都加1.
### 如何处理复杂度的度量结果:
- 0-5 子程序可能还不错.
- 6-10 得想办法简化子程序.
- 10+ 把子程序的某一部分拆分成另一个子程序并调用它.
### 如何对待代码复审(详查)?
- 你应该承认每一个所谓的缺陷, 然后继续详查. 承认一个批评并不意味着你认同批评的内 容.
- 在复查工作中, 你不应该试图为正在被检查的工作辩护.
- 在复查之后, 你可以独自对每一个问题进行思考, 判断它是否真的是一个缺陷.
—– Steven McConner << Code Complete 2nd>>
### 如何修正坏习惯?
不能用”没有习惯”来代替”坏习惯” – 这就是人们骤然停止吸烟,停止咒骂或者停止多食是会很难受的原因.除非有了代替方法, 如嚼口香糖. 以新习惯来取代老习惯, 要比干脆戒除老习惯容易.
```java
——-Steven McConnel
private String convertCourse(double course) {
int c = (int) course / 90;
double y = course % 90;
String yf = nft.format(y);
String[][] directions=new String[][]{new String[]{"正北","北偏东"},
new String[]{"正东","东偏南"},
new String[]{"正南","南偏西"},
new String[]{"正西","西偏北"}};
int d=(y==0.0? 0:1);
return directions[c][d]+(d==0?"":yf+"度");
}
private String convertCourse(double course) {
int c = (int) course / 90;
double y = course % 90;
String yf = nft.format(y);
if (0 == c && 0 == y) {
return "正北";
} else if (0 == c) {
return "北偏东" + yf + "度";
}
if (1 == c && 0 == y) {
return "正东";
} else if (1 == c) {
return "东偏南" + yf + "度";
}
if (2 == c && 0 == y) {
return "正南";
} else if (2 == c) {
return "南偏西" + yf + "度";
}
if (3 == c && 0 == y) {
return "正西";
} else if (3 == c) {
return "西偏北" + yf + "度";
}
return "--";
}
```