Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
testacount1 committed Oct 29, 2017
1 parent dc5c598 commit c4d8b15
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 20 deletions.
40 changes: 20 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,26 +230,26 @@ double 体重 = 999999999999.9; // 双精度浮点数: 2^-1074到(2-2^-52)*2^102

上一讲的四则运算类中,已经尝试了4种运算符. 变量运算的结果可以赋给自己,或者另一个变量.

举个例子,某投资方法,可以有8%的年回报率,那么1000元的初始投入资金,3年之后会变成多少.下面是一个很直白的计算方法:
举个例子, 如2岁的时候认识一个字,每年增加两倍, 3年之后会变成多少.下面是一个很直白的计算方法:
```
class 投资回报 {
class 识字类 {
public static void main (String[] 参数) {
float 账户余额 = 1000f;
float 回报率 = 0.08f;
int 识字量 = 1;
int 每年增倍数 = 2;
// 第一年
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
// 第二年
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
// 第三年
账户余额 = (1 + 回报率) * 账户余额;
System.out.println("三年后变成" + 账户余额 + "");
识字量 = (1 + 每年翻倍数) * 识字量;
System.out.println("三年后认识" + 识字量 + "个字咯");
}
}
```
你的感觉没错, 它看起来就很累赘, 而且如果要算20年后呢?
你的感觉没错, 它看起来就很累赘, 而且如果要算10年后呢?

恭喜! 你已经有了判断代码优劣的直觉. 至于改进方法,留个悬念吧.

Expand Down Expand Up @@ -345,50 +345,50 @@ if ("辛苦".equals("不辛苦")) {
扩展资料: &&, ||, switch, ?:, 字符串比较

## 八 直到...一直...
记得算投资回报的程序么? 如果要算20年, 难道必须重复20行"账户余额 = (1 + 回报率) * 账户余额;"吗? 用脚趾想也不可能吧.
记得算识字量的程序么? 如果要算10年, 难道必须重复10行`识字量 = (1 + 每年翻倍数) * 识字量;`吗? 用脚趾想也不可能吧.

在写代码之前, 不妨先构思一下该怎么算. 这里多了一个输入值: 年限. 照原来的思路应该是: 每过一年增一次值, 直到过了20年. 这样就需要记着过了多少年. 之前提到, 一个变量用来"记"变化的值最合适:
在写代码之前, 不妨先构思一下该怎么算. 这里多了一个输入值: 年限. 照原来的思路应该是: 每过一年增加一次识字量, 直到过了10年. 这样就需要记着过了多少年. 之前提到, 一个变量用来"记"变化的值最合适:
```
for (int 年份 = 0; 年份 < 年限; 年份 = 年份 + 1) {
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
}
```
上面的代码反映了我们的思路:
- 1 变量"年份"初始值是0
- 2 如果它小于20, 说明没到20年, 那么就运行{}的内容, 增一次值; 如果到了20年, 就结束循环
- 2 如果它小于10, 说明没到10年, 那么就运行{}的内容, 增一次识字量; 如果到了10年, 就结束循环
- 3 "年份"加一, 继续执行第2步

同样的循环用while的格式来写是这样:
```
int 年份 = 0;
while (年份 < 年限) {
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
年份 = 年份 + 1;
}
```
看起来for循环更紧凑, 也更不容易写错. while循环里,如果忘写了"年份 = 年份 + 1;",可就有趣了,因为年份没有增加, 循环中止条件一直不能满足(0永远小于年限), 代码运行停不下来,俗称"死循环". 而for循环里因为定了"(初始化; 循环条件; 累加或递减执行语句)"的格式, 少了一项会很扎眼.

如果想要提前结束循环,可以用break. 想知道过几年能赚到2000的话:
如果想要提前结束循环,可以用break. 想知道过几年能认识中文的常用三千字的话:
```
int 年份 = 0;
while (年份 < 年限) {
if (账户余额 > 2000) {
if (识字量 > 3000) {
break;
}
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
年份 = 年份 + 1;
}
System.out.println(年份 + "年后变成" + 账户余额 + "");
System.out.println(年份 + "年后认识" + 识字量 + "个字");
```
break执行后,它所在的循环就被打断,程序从循环之后开始执行.

如果想要循环继续执行,但是跳过循环内的部分代码,可以用continue. 一个牵强的例子,如果从第三年才开始有回报:
如果想要循环继续执行,但是跳过循环内的部分代码,可以用continue. 一个牵强的例子,如果从第三年才开始认识新字(比如在国外呆了三年):
```
for (int 年份 = 0; 年份 < 年限; 年份 = 年份 + 1) {
if (年份 < 3) {
continue;
}
账户余额 = (1 + 回报率) * 账户余额;
识字量 = (1 + 每年翻倍数) * 识字量;
}
```
注: 有更简短的实现方法, 这个例子只为了演示continue的用处.
Expand Down
17 changes: 17 additions & 0 deletions 识字循环类.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
class 识字循环类 {
public static void main (String[] 参数) {
int 识字量 = 1;
int 每年翻倍数 = 2;
int 年限 = 10;
int 年份 = 0;

while (年份 < 年限) {
if (识字量 > 3000) {
break;
}
识字量 = (1 + 每年翻倍数) * 识字量;
年份 = 年份 + 1;
}
System.out.println(年份 + "年后认识" + 识字量 + "个字");
}
}
16 changes: 16 additions & 0 deletions 识字类.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class 识字类 {
public static void main (String[] 参数) {
int 识字量 = 1;
int 每年翻倍数 = 2;

// 第一年
识字量 = (1 + 每年翻倍数) * 识字量;

// 第二年
识字量 = (1 + 每年翻倍数) * 识字量;

// 第三年
识字量 = (1 + 每年翻倍数) * 识字量;
System.out.println("三年后认识" + 识字量 + "个字咯");
}
}

0 comments on commit c4d8b15

Please sign in to comment.