【原】Java学习笔记006 - 流程控制

 1 package cn.temptation;
 2 
 3 public class Sample01 {
 4     public static void main(String[] args) {
 5         // 需求:写一万次"我错了!"
 6         
 7         // 方式1、使用CV大法
 8         System.out.println("我错了!");
 9         System.out.println("我错了!");
10         System.out.println("我错了!");
11         System.out.println("我错了!");
12         // ...
13         
14         // 方式2、机械的重复的动作,很傻,考虑让计算机去做,引入了循环的概念
15         // 循环怎么理解?
16         // 循:按照一定的规律
17         // 环:闭合的圆,重复的
18         
19         // 循环的形式:
20         /*
21          * 1、while循环
22          * 2、do...while循环
23          * 3、for循环
24          */
25     }
26 }
 1 package cn.temptation;
 2 
 3 public class Sample02 {
 4     public static void main(String[] args) {
 5         // while循环(当型循环)
 6         
 7         /*
 8          * while(条件) { ... }
 9          * 当条件满足时,一直做某事,直到条件不满足为止
10          * 
11          * while结构中的 { ... } 包含的内容称为循环体
12          */
13         
14         // 需求:打印显示"我错了!"这句话3遍
15         // 定义次数变量
16         int count = 0;
17         
18         while (count < 3) {
19             // 做打印显示的事情
20             System.out.println("我错了!");
21             
22             // 对次数进行统计(即做了一次打印显示,就让次数加1)
23 //            count = count + 1;
24 //            count += 1;
25 //            count++;
26             ++count;
27             
28             System.out.println("当前为第" + count + "次");
29         }
30     }
31 }
 1 package cn.temptation;
 2 
 3 public class Sample03 {
 4     public static void main(String[] args) {
 5         // 需求:使用while循环输出10以内的奇数:1、3、5、7、9
 6         int i = 1;
 7         
 8         // 写法1、考虑连续的奇数之间的间隔为2
 9 //        while (i < 10) {
10 //            System.out.println(i);
11 ////            i = i + 2;
12 ////            i += 2;
13 //            
14 //            // Invalid argument to operation ++/--
15 ////            i++++;
16 ////            (i++)++;
17 //            
18 //            // 非要使用自增
19 //            i++;
20 //            i++;
21 //        }
22         
23         // 写法2、考虑在while循环中使用自增,但是只对那些和2求余数为1的数字才显示出来
24         while (i < 10) {
25             // 结合选择结构
26             // 判断是否为和2求余数为1的数字
27             if (i % 2 == 1) {
28                 System.out.println(i);
29             }
30             
31             i++;
32         }
33     }
34 }
 1 package cn.temptation;
 2 
 3 public class Sample04 {
 4     public static void main(String[] args) {
 5         // 需求:计算从1+2+3+...+100的和
 6         int i = 1;
 7         int result = 0;
 8         
 9         // 分步来看1+2+3+...+100这个加法算式
10 //        result += 1;
11 //        result += 2;
12 //        // ...
13 //        result += 100;
14         
15         // 因为有一定的规律,且重复的在操作,所以考虑使用循环
16         while (i <= 100) {
17             System.out.println(i);
18             
19             result += i;
20             
21             // i每次加法操作后都要做一下自增
22             i++;
23         }
24         
25         System.out.println("1+2+3+...+100的总和为:" + result);
26     }
27 }
 1 package cn.temptation;
 2 
 3 public class Sample05 {
 4     public static void main(String[] args) {
 5         // 需求:世界最高峰珠穆朗玛峰有8848米,现在有一张很大很大的纸,纸的厚度为0.001米,折叠多少次后可以超过珠峰的高度?
 6         
 7         // 思路:纸每次折叠,厚度都会是上一次厚度的2倍
 8         
 9         // 纸的初始厚度
10         int height = 1;
11         // 折叠次数
12         int count = 0;
13         
14         while (height <= 8848000) {
15             // 纸每次折叠,厚度都会是上一次厚度的2倍
16             height = height * 2;
17             
18             // 折叠一次,折叠次数加1
19             count++;
20         }
21         
22         System.out.println("折叠了" + count + "次后,就会超过珠峰的高度");
23     }
24 }
 1 package cn.temptation;
 2 
 3 public class Sample06 {
 4     public static void main(String[] args) {
 5         // 需求:存折中现在有1000块钱,银行的年利息为3.5%,问在银行里放多少年后,连本带利能翻倍?
 6         
 7         // 定义存折的金额
 8         double cash = 1000.00;
 9         // 定义目标金额
10         double total = cash * 2;
11         // 定义年数
12         int year = 0;
13         
14         while (cash < total) {
15             // 本金和利息记为后一年的本金
16             cash = (1 + 0.035) * cash;
17             
18             year++;
19         }
20         
21         System.out.println("在银行里放" + year + "年后,连本带利能翻倍");
22     }
23 }
 1 package cn.temptation;
 2 
 3 public class Sample07 {
 4     public static void main(String[] args) {
 5         // while循环的要点:条件放上头,控制里面走
 6         int i = 1;
 7         
 8         while (i < 5) {
 9             i++;        // 显示:2、3、4、5
10             System.out.println(i);
11 //            i++;        // 显示:1、2、3、4
12         }
13         
14         // 循环编写时,特别要注意循(按照一定的规律)的规律的归纳总结,这是写好循环的关键
15     }
16 }
 1 package cn.temptation;
 2 
 3 public class Sample08 {
 4     public static void main(String[] args) {
 5         // 需求:统计100 ~ 999之间的水仙花数并计算有多少个?
 6 
 7         // 规则:以三位数字为例,数字的值 = (百位上的数字 * 百位上的数字 * 百位上的数字)
 8         //                                    + (十位上的数字 * 十位上的数字 * 十位上的数字)
 9         //                                    + (个位上的数字 * 个位上的数字 * 个位上的数字),则称为是一个水仙花数
10         // 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3
11         
12         // 定义数字变量并赋值
13         int number = 100;
14         // 定义统计个数用的变量
15         int count = 0;
16         
17         while (number <= 999) {
18             // 关键点:如何获取百位上的数字、十位上的数字、个位上的数字?
19             // 个位上的数字
20             int i = number / 1 % 10;
21             // 十位上的数字
22             int j = number / 10 % 10;
23             // 百位上的数字
24             int k = number / 100 % 10;
25             
26             // 根据上面的分析,得到通用的公式,注意求余的10表示的是十进制的含义
27             
28             // 规则:以三位数字为例,数字的值 = (百位上的数字 * 百位上的数字 * 百位上的数字)
29             //                                    + (十位上的数字 * 十位上的数字 * 十位上的数字)
30             //                                    + (个位上的数字 * 个位上的数字 * 个位上的数字),则称为是一个水仙花数
31             // 结合选择结构进行判定
32             if (number == i * i * i + j * j * j + k * k *k) {
33                 System.out.println(number);
34                 // 统计用的变量需要自增
35                 count++;
36             }
37             
38             // 统计的范围从100~999,所以数字需要自增
39             number++;
40         }
41         
42         System.out.println("【100~999】之间的水仙花数有:" + count + "个");
43     }
44 }
 1 package cn.temptation;
 2 
 3 public class Sample09 {
 4     public static void main(String[] args) {
 5         // 需求:大蜀山上有一段台阶,级数不知道,但是知道如果两个台阶一起跨,还剩1个台阶;
 6         //        如果三个台阶一起跨,还剩2个台阶;如果四个台阶一起跨,还剩3个台阶;
 7         //        如果五个台阶一起跨,还剩4个台阶;如果六个台阶一起跨,还剩5个台阶;
 8         //        如果七个台阶一起跨,一个台阶都不剩。
 9         //        问:这段台阶最少有多少级?
10         
11         // 定义台阶变量
12         int step = 1;
13         
14         // 思路:运用穷举思想,一个数字一个数字的来尝试是否满足规则
15         
16         // 写法1、当台阶数不满足规则的,需要做自增;当找到第1个满足规则的台阶数时,就是最少的满足规则的台阶级数,不用自增了
17 //        while (!((step % 2 == 1) && (step % 3 == 2) && (step % 4 == 3) && (step % 5 == 4) && (step % 6 == 5) && (step % 7 == 0))) {
18 //            step++;
19 //        }
20 //        
21 //        System.out.println("这段台阶最少有" + step + "级");
22         
23         // 写法2、构造一个死循环,不断的做自增,在循环体中判断是否满足规则,当找到第1个满足规则的数字时,终止循环跳出
24         // while死循环的结构
25 //        while (true) {
26 //            System.out.println("死循环了么?");
27 //        }
28         
29         boolean flag = true;
30         while (flag) {
31             // 对台阶级数进行规则判断
32             if ((step % 2 == 1) && (step % 3 == 2) && (step % 4 == 3) && (step % 5 == 4) && (step % 6 == 5) && (step % 7 == 0)) {
33                 System.out.println("这段台阶最少有" + step + "级");
34                 flag = false;
35             }
36             
37             step++;
38         }
39     }
40 }
 1 package cn.temptation;
 2 
 3 public class Sample10 {
 4     public static void main(String[] args) {
 5         // 需求:百钱百鸡问题:母鸡一只5元,公鸡一只3元,小鸡三只1元,有100元,如何买到100只鸡?母鸡多少只?公鸡多少只?小鸡多少只?(母鸡、公鸡、小鸡都有)
 6         
 7         // 思路:
 8         // 从需求中得到一些等式
 9         // 母鸡数量 + 公鸡数量 + 小鸡数量 = 100
10         // 母鸡单价 * 母鸡数量 + 公鸡单价 * 公鸡数量 + 小鸡单价 * 小鸡数量 = 100
11         // 小鸡数量是3的倍数
12         
13         // 运用"穷举法"
14         // 如果买1只母鸡,再买1只公鸡,还能买多少只小鸡
15         // 如果买1只母鸡,再买2只公鸡,还能买多少只小鸡
16         // ...
17         // 如果买2只母鸡,再买1只公鸡,还能买多少只小鸡
18         // 如果买2只母鸡,再买2只公鸡,还能买多少只小鸡
19         // ...
20         
21         // 母鸡数量
22         int i = 0;
23         // 公鸡数量
24         int j = 0;
25         // 小鸡数量
26         int k = 0;
27         
28         System.out.println("计算百钱百鸡问题的结果:");
29         
30         // while循环的嵌套
31         // 注意:使用while循环的嵌套时,格外要注意内层while循环的循环条件;同时也要考虑到while循环的执行效率
32 
33         // 下句语句其实效率不高,可以改进
34 //        while (i < 100) {    // 统计买母鸡的只数
35         while (i < 20) {    // 统计买母鸡的只数
36             // 注意:必须在后一次的内层循环之前,把变量j的值重新赋值一下,否则这个变量j的值还是上一次内层循环结束时得到的那个值
37             j = 0;
38             
39             // 下句语句其实效率不高,可以改进
40 //            while (j < 100) {    // 统计买公鸡的只数
41             while (j < 33) {    // 统计买公鸡的只数
42                 // 可以根据母鸡数量 和 公鸡数量 就可以得到小鸡数量
43                 k = 100 - i - j;
44                 
45                 // 根据思路分析中列出的等式
46                 if ((5 * i + 3 * j + k / 3 == 100) && (k % 3 == 0) && (i != 0) && (j != 0) && (k != 0)) {
47                     System.out.println("母鸡为:" + i + "只,公鸡为:" + j + "只,小鸡为:" + k + "只");
48                 }
49                 
50                 j++;
51             }
52             i++;
53         }
54         
55     }
56 }
 1 package cn.temptation;
 2 
 3 public class Sample11 {
 4     public static void main(String[] args) {
 5         // do...while循环(直到型循环)
 6         // 格式:
 7 //        do {
 8 //            System.out.println("直到型循环");
 9 //        } while (condition);
10         
11         int i = 1;
12         
13 //        do {
14 //            System.out.println(i);
15 //            i++;
16 //        } while (i < 4);
17         
18         // while循环 和 do...while循环的区别:
19         // 1、可以设置断点,结合调试分析
20         //        while循环的条件写在最上面,一上来就先判断条件是否满足,满足了才会进入循环体执行语句
21         //        do...while循环的条件写在最后,一上来就先进入循环体并执行循环体中的语句,再判断循环条件是否满足,满足的话继续循环
22         //    注意:do...while循环在相同的条件(condition)不成立的情况下会比while循环多执行一次
23         // 2、while结构就是一个语句块;do...while结构后必须要有一个分号,否则就产生语法错误
24         
25         // do...while循环在相同的条件(condition)成立的情况下和while循环的执行次数相同
26         while (i < 3) {
27             System.out.println(i);
28             i++;
29         }
30         
31         do {
32             System.out.println(i);
33             i++;
34         } while (i < 3);
35         
36         // do...while循环在相同的条件(condition)不成立的情况下会比while循环多执行一次
37         while (i < 1) {
38             System.out.println(i);
39             i++;
40         }
41         
42         do {
43             System.out.println(i);
44             i++;
45         } while (i < 1);
46     }
47 }
 1 package cn.temptation;
 2 
 3 public class Sample12 {
 4     public static void main(String[] args) {
 5         // 需求:使用do...while循环输出1~100之间的数字
 6         // 需求:使用do...while循环计算1+2+...+100和
 7         int i = 1;
 8         
 9         do {
10             System.out.println(i);
11             i++;
12         } while (i <= 100);
13         
14         // 因为此时i == 101,所以需要把i进行重置
15         i = 1;
16         int sum = 0;
17         
18         do {
19             sum += i;
20             i++;
21         } while (i <= 100);
22         
23         System.out.println("1+2+...+100=" + sum);
24     }
25 }
 1 package cn.temptation;
 2 
 3 public class Sample13 {
 4     public static void main(String[] args) {
 5         // 需求:使用do...while循环列出1~100之间所有的奇数
 6         int i = 1;
 7         
 8         // 写法1、奇数的间隔为2
 9 //        do {
10 //            System.out.println(i);
11 //            i += 2;
12 //        } while (i <= 100);
13         
14         // 写法2、奇数是和2求余数为1的数字
15         do {
16             if (i % 2 == 1) {
17                 System.out.println(i);
18             }
19             
20             i++;
21         } while (i <= 100);
22     }
23 }

 

posted @ 2017-02-26 10:56  {name:"代码屠夫"}  阅读(254)  评论(0编辑  收藏  举报