04循环结构

1:switch语句(掌握)

(1)格式:
  switch(表达式) {
    case 值1:
      语句体1;
      break;
    case 值2:
      语句体2;
      break;
      ...
    default:
      语句体n+1;
      break;
}

格式解释说明:
  switch:说明这是switch语句。
  表达式:可以是byte,short,int,char
    JDK5以后可以是枚举
    JDK7以后可以是字符串
  case:后面的值就是要和表达式进行比较的值
  break:表示程序到这里中断,跳出switch语句
  default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

(2)面试题
  switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
    可以,不可以,JDK7以后可以

Demo.java

 1 /*
 2     switch语句格式:
 3         switch(表达式) {
 4             case 值1:
 5                 语句体1;
 6                 break;
 7             case 值2:
 8                 语句体2;
 9                 break;
10             ...
11             default:
12                 语句体n+1;
13                 break;
14         }
15         
16     格式的解释:
17         switch:表示这是switch选择结构
18         表达式:这个地方的取值是有限定的
19             byte,short,int,char
20             JDK5以后可以是枚举
21             JDK7以后可以是字符串
22         case:后面跟的是要和表达式进行比较的值
23         语句体:要执行的代码
24         break:表示中断,结束的意思,可以控制switch语句的结束。
25         default:当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
26     
27     面试题:
28         byte可以作为switch的表达式吗?
29         long可以作为switch的表达式吗?
30         String可以作为switch的表达式吗?
31         
32     案例:
33         键盘录入一个数据,根据这个数据,我们输出对应的星期?
34             键盘录入1,对应输出星期一
35             键盘录入2,对应输出星期二
36             ...
37             键盘录入7,对应输出星期日
38             
39     分析:
40         1:键盘录入,用Scanner实现
41         2:判断我们既可以使用if语句,也可以使用我们要讲解的switch语句
42         
43     注意:
44         A:遇到左大括号缩进一个tab的位置。
45         B:关联不是很大的语句间空行
46 */
47 import java.util.Scanner;
48 
49 class SwitchDemo {
50     public static void main(String[] args) {
51         //创建键盘录入对象
52         Scanner sc = new Scanner(System.in);
53         
54         //控制键盘录入数据
55         System.out.println("请输入一个数据(1-7):");
56         int week = sc.nextInt(); //3
57         
58         //switch判断语句
59         switch(week) {
60             case 1:
61                 System.out.println("星期一");
62                 break;
63             case 2:
64                 System.out.println("星期二");
65                 break;
66             case 3:
67                 System.out.println("星期三");
68                 break;
69             case 4:
70                 System.out.println("星期四");
71                 break;
72             case 5:
73                 System.out.println("星期五");
74                 break;
75             case 6:
76                 System.out.println("星期六");
77                 break;
78             case 7:
79                 System.out.println("星期日");
80                 break;
81             default:
82                 System.out.println("你输入的数据有误");
83                 break;
84         }
85     }
86 }

(3)执行流程:
  A:首先计算表达式的值
  B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
  C:如果没有匹配,就执行default的语句体n+1。


(4)注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
特殊情况:
case就可以把值固定。
A,B,C,D
C:break可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:case穿透。
最终我们建议不要省略
D:default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了

(5)案例:
A:键盘录入一个数字(1-7),输出对应的星期几。
B:单项选择题
C:键盘录入一个字符串的问题
String s = sc.nextLine();
D:根据给定的月份,输出对应的季节
(6)if语句和switch语句各自的场景
  A:if
    针对boolean类型的判断
    针对一个范围的判断
    针对几个常量的判断
  B:switch
    针对几个常量的判断

Demo1.java【int型常量】

 1 /*
 2     switch语句的注意事项:
 3         A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
 4         B:default可以省略吗?
 5             可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
 6             特殊情况:
 7                 case就可以把值固定。
 8                 A,B,C,D
 9         C:break可以省略吗?
10             可以省略,但是结果可能不是我们想要的。
11             会出现一个现象:case穿透。
12             最终我们建议不要省略
13         D:default一定要在最后吗?
14             不是,可以在任意位置。但是建议在最后。
15         E:switch语句的结束条件
16             a:遇到break就结束了
17             b:执行到末尾就结束了
18 */
19 import java.util.Scanner;
20 
21 class SwitchDemo2 {
22     public static void main(String[] args) {
23         //创建键盘录入对象
24         Scanner sc = new Scanner(System.in);
25         
26         //控制键盘录入数据
27         System.out.println("请输入一个数据(1-7):");
28         int week = sc.nextInt(); //3
29         
30         //定义常量
31         //int number = 3;
32         //然后把case后面的值改为number,就会报错
33         
34         //switch判断语句
35         switch(week) {
36             case 1:
37                 System.out.println("星期一");
38                 break;
39             case 2:
40                 System.out.println("星期二");
41                 break;
42             case 3:
43                 System.out.println("星期三");
44                 break;
45             case 4:
46                 System.out.println("星期四");
47                 break;
48             case 5:
49                 System.out.println("星期五");
50                 break;
51             case 6:
52                 System.out.println("星期六");
53                 break;
54             case 7:
55                 System.out.println("星期日");
56                 break;
57             default:
58                 System.out.println("你输入的数据有误");
59                 //break;
60         }
61     }
62 }

 Test.java【】

 1 /*
 2     看程序写结果
 3 */
 4 class SwitchTest {
 5     public static void main(String[] args) {
 6         int x = 2;
 7         int y = 3;
 8         switch(x){
 9             default:
10                 y++;
11                 break;
12             case 3:
13                 y++;
14             case 4:
15                 y++;
16         }
17         System.out.println("y="+y);
18         System.out.println("---------------");
19         
20         int a = 2;
21         int b = 3;
22         switch(a){
23             default:
24                 b++;
25             case 3:
26                 b++;
27             case 4:
28                 b++;
29         }
30         System.out.println("b="+b);
31     }
32 }

SwitchTest2.java【char类型】

 1 /*
 2     模拟单项选择题。
 3     
 4     分析:
 5         A:出一个选择题,然后供你选择。
 6         B:键盘录入选择的数据。
 7         C:根据选择来给出你选择的结论。
 8 */
 9 import java.util.Scanner;
10 
11 class SwitchTest2 {
12     public static void main(String[] args) {
13         //出一个选择题,然后供你选择。
14         //由于我们现在没有办法键盘录入得到一个'A','B'
15         //这样的东西,我就用65,66这样的值替代
16         //将来我们获取到这样的值以后,强制转换为字符类型
17         System.out.println("下面的几个人你最爱谁?");
18         System.out.println("65 林青霞");
19         System.out.println("66 张曼玉");
20         System.out.println("67 刘德华");
21         System.out.println("68 王力宏");
22         
23         //键盘录入选择的数据。
24         Scanner sc = new Scanner(System.in);
25         
26         System.out.println("请输入你的选择:");
27         int choiceNumber = sc.nextInt();
28         
29         //强制转换为字符类型
30         char choice = (char) choiceNumber;
31         
32         switch(choice) {
33             case 'A':
34                 System.out.println("恭喜你,选择正确");
35                 break;
36             case 'B':
37                 System.out.println("不好意思,你选择有误");
38                 break;
39             case 'C':
40                 System.out.println("不好意思,你选择有误");
41                 break;
42             case 'D':
43                 System.out.println("不好意思,你选择有误");
44                 break;
45             default:
46                 System.out.println("没有该选项");
47                 break;
48         }
49     }
50 }

SwitchTest3.java【String类型】

 1 /*
 2     根据你键盘录入的字符串,判断是否有满足要求的,如果有就输出。
 3     否则,提示有误。
 4     
 5     String s = sc.nextLine();
 6 */
 7 import java.util.Scanner;
 8 
 9 class SwitchTest3 {
10     public static void main(String[] args) {
11         //创建键盘录入对象
12         Scanner sc = new Scanner(System.in);
13         
14         //录入数据
15         System.out.println("请输入你要判断的字符串:");
16         String s = sc.nextLine();
17         
18         switch(s) {
19             case "hello":
20                 System.out.println("你输入的是hello");
21                 break;
22             case "world":
23                 System.out.println("你输入的是world");
24                 break;
25             case "java":
26                 System.out.println("你输入的是java");
27                 break;
28             default:
29                 System.out.println("没有找到你输入的数据");
30                 //break;
31         }
32     }
33 }

 

SwitchTest4.java【演示case穿透】

 1 /*
 2     用switch语句实现键盘录入月份,输出对应的季节
 3     
 4     分析:
 5         A:键盘录入一个月份,用Scanner实现
 6         B:用switch语句实现即可
 7         
 8     if语句和switch语句的区别?
 9         if语句:
10             A:针对结果是boolean类型的判断
11             B:针对一个范围的判断
12             C:针对几个常量值的判断
13         
14         switch语句:
15             针对几个常量值的判断
16 */
17 import java.util.Scanner;
18 
19 class SwitchTest4 {
20     public static void main(String[] args) {
21         //创建键盘录入对象
22         Scanner sc = new Scanner(System.in);
23         
24         //录入数据
25         System.out.println("请输入月份(1-12):");
26         int month = sc.nextInt();
27         
28         /*
29         switch(month) {
30             case 1:
31                 System.out.println("冬季");
32                 break;
33             case 2:
34                 System.out.println("冬季");
35                 break;
36             case 3:
37                 System.out.println("春季");
38                 break;
39             case 4:
40                 System.out.println("春季");
41                 break;
42             case 5:
43                 System.out.println("春季");
44                 break;
45             case 6:
46                 System.out.println("夏季");
47                 break;
48             case 7:
49                 System.out.println("夏季");
50                 break;
51             case 8:
52                 System.out.println("夏季");
53                 break;
54             case 9:
55                 System.out.println("秋季");
56                 break;
57             case 10:
58                 System.out.println("秋季");
59                 break;
60             case 11:
61                 System.out.println("秋季");
62                 break;
63             case 12:
64                 System.out.println("冬季");
65                 break;
66             default:
67                 System.out.println("你输入的月份有误");
68         }
69         */
70         
71         //这样写太麻烦了,我们使用一个我们不想使用的东西:case穿透
72         switch(month) {
73             case 1:
74             case 2:
75             case 12:
76                 System.out.println("冬季");
77                 break;
78             case 3:
79             case 4:
80             case 5:
81                 System.out.println("春季");
82                 break;
83             case 6:
84             case 7:
85             case 8:
86                 System.out.println("夏季");
87                 break;
88             case 9:
89             case 10:
90             case 11:
91                 System.out.println("秋季");
92                 break;
93             default:
94                 System.out.println("你输入的月份有误");
95         }
96     }
97 }

 

2:循环语句(掌握)
  (1)有三种:for,while,do...while
  (2)for循环语句
  A:格式
  for(初始化语句;判断条件语句;控制条件语句){
    循环体语句;
  }

执行流程:
  a:执行初始化语句
  b:执行判断条件语句
  如果这里是true,就继续
  如果这里是false,循环就结束
  c:执行循环体语句
  d:执行控制条件语句
  e:回到b
B:注意事项
  a:判断条件语句无论简单还是复杂,结果是boolean类型
  b:循环体语句如果是一条,可以省略大括号,但是不建议
  c:有分号就没有左大括号,有左大括号就没有分号


C:案例
  a:输出10次HelloWorld
  b:输出1-10的数据
  c:输出10-1的数据
  d:求1-10的和
  e:求1-100的和,求1-100的偶数和,求1-100的奇数和
  f:求5的阶乘
  g:在控制台打印水仙花数
  h:统计水仙花个数
  i:改进版的回文数
  一个五位数
  个位 = 万位
  十位 = 千位
  个位 + 十位 + 千位 + 万位 = 百位
  j:统计1-1000之间同时满足如下条件的数据有多少个
  x%3==2
  x%5==3
  x%7==2
(3)while循环
A:基本格式
while(判断条件语句) {
循环体语句;
}

扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}

通过查看这个格式,我们就知道while循环可以和for循环等价转换。


B:while的练习
把for语句的练习用while改进


C:for和while的区别
a:使用上的区别
for语句的那个控制条件变量,在循环结束后不能在使用了。
而while的可以继续使用。
b:理解上的区别
for适合于一个范围的判断
while适合次数不明确的
举例:吃葡萄


D:案例:
a:珠穆朗玛峰问题
b:小芳存钱问题(break以后才能做)
(4)do...while循环
A:基本格式
do {
循环体语句;
}while(判断条件语句);

扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);

通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
B:三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体


(5)循环使用的注意事项(死循环)
A:一定要注意修改控制条件,否则容易出现死循环。
B:最简单的死循环格式
  a:while(true){...}

  b:for(;;){}

ForDemo.java

 1 /*
 2     循环语句:for循环,while循环,do...while循环。
 3     
 4     for循环格式:
 5         for(初始化语句;判断条件语句;控制条件语句) {
 6             循环体语句;
 7         }
 8         
 9         执行流程:
10             A:执行初始化语句
11             B:执行判断条件语句,看其返回值是true还是false
12                 如果是true,就继续执行
13                 如果是false,就结束循环
14             C:执行循环体语句;
15             D:执行控制条件语句
16             E:回到B继续。
17             
18     注意事项:
19         A:判断条件语句无论简单还是复杂结果是boolean类型。
20         B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
21         C:一般来说:有左大括号就没有分号,有分号就没有左大括号
22             
23     需求:请在控制台输出10次"HelloWorld"
24 */
25 class ForDemo {
26     public static void main(String[] args) {
27         //最原始的做法
28         System.out.println("HelloWorld");
29         System.out.println("HelloWorld");
30         System.out.println("HelloWorld");
31         System.out.println("HelloWorld");
32         System.out.println("HelloWorld");
33         System.out.println("HelloWorld");
34         System.out.println("HelloWorld");
35         System.out.println("HelloWorld");
36         System.out.println("HelloWorld");
37         System.out.println("HelloWorld");
38         System.out.println("----------");
39         
40         //这种做法不好,代码的重复度太高。
41         //所以呢,我们用循环改进
42         for(int x=1;x<=10;x++) {
43             System.out.println("HelloWorld");
44         }
45     }
46 }

ForDemo2.java

 1 /*
 2     需求:请在控制台输出数据1-10
 3 */
 4 class ForDemo2 {
 5     public static void main(String[] args) {
 6         //原始做法
 7         System.out.println(1);
 8         System.out.println(2);
 9         System.out.println(3);
10         System.out.println(4);
11         System.out.println(5);
12         System.out.println(6);
13         System.out.println(7);
14         System.out.println(8);
15         System.out.println(9);
16         System.out.println(10);
17         
18         System.out.println("-------------");
19         
20         //如何改进呢?用循环改进
21         for(int x=1; x<=10; x++) {
22             System.out.println(x);
23         }
24         
25         System.out.println("-------------");
26         
27         //从0开始
28         for(int x=0; x<10; x++) {
29             System.out.println(x+1);
30         }
31     }
32 }    

ForDemo3.java

 1 /*
 2     需求:求出1-10之间数据之和
 3     
 4     分析:
 5         0+1=1
 6             1+2=3
 7                 3+3=6
 8                     6+4=10
 9                         10+5=15
10                              ...
11                              
12         由此可见我们要定义两个变量:
13             一个变量用于存储第一个加数,第一个加数其实保存的是以前的所有数据和。默认初始化值应该是0。
14             一个变量用于存储第二个加数,第二个加数其实就是每次的数据变化的值。
15             
16     求和思想。        
17 */
18 class ForDemo3 {
19     public static void main(String[] args) {
20         //原始做法
21         System.out.println(1+2+3+4+5+6+7+8+9+10);
22         
23         //定义第一个加数
24         int sum = 0;
25         
26         for(int x=1; x<=10; x++) {
27             //这里的x其实是第二个加数
28             sum = sum + x;
29             /*
30                 0 + 1 = 1
31                         1 + 2 = 3
32                                 3 + 3 = 6
33                                 ...
34             */
35             
36             //sum += x;
37         }
38         
39         System.out.println("sum:"+sum);
40     }
41 }

ForDemo4.java

 1 /*
 2     需求:
 3         A:求1-100之和。
 4         B:求出1-100之间偶数和
 5         C:求出1-100之间奇数和(自己做)
 6 */
 7 class ForDemo4 {
 8     public static void main(String[] args) {
 9         //求1-100之和。
10         int sum1 = 0;
11         
12         for(int x=1; x<=100; x++) {
13             sum1 +=x;
14         }
15         
16         System.out.println("1-100之和是:"+sum1);
17         System.out.println("------------------");
18         
19         //求出1-100之间偶数和
20         //方式1
21         int sum2 = 0;
22         
23         for(int x=1; x<=100; x++) {
24             if(x%2 == 0) {
25                 sum2 += x;
26             }
27         }
28         
29         System.out.println("1-100偶数之和是:"+sum2);
30         System.out.println("------------------");
31         
32         //方式2
33         int sum3 = 0;
34         
35         for(int x=0; x<=100; x+=2) {
36                 sum3 += x;
37         }
38         
39         System.out.println("1-100偶数之和是:"+sum3);
40         System.out.println("------------------");
41     }
42 }

ForDemo4.java【求阶乘】

 

 1 /*
 2     需求:求5的阶乘。
 3     
 4     什么是阶乘呢?
 5         n! = n*(n-1)! 规则
 6         n! = n*(n-1)*(n-2)*...*3*2*1
 7         
 8     求和思想。
 9     求阶乘思想。
10 */
11 class ForDemo5 {
12     public static void main(String[] args) {
13         //定义最终结果变量
14         int jc = 1;
15         
16         //这里的x其实可以直接从2开始
17         //for(int x=1; x<=5; x++) 
18         
19         for(int x=2; x<=5; x++) {
20             jc *=x;
21         }
22         
23         System.out.println("1-5的阶乘是:"+jc);
24     }
25 }

 

ForDemo5.java【水仙花数】

 1 /*
 2     天将降大任于斯人也,必先盗其QQ,封其微博,收其wifi,夺其手机。让其静心学习Java欧耶。
 3 
 4     需求:在控制台输出所有的”水仙花数”
 5     
 6     分析:
 7         我们都不知道什么叫"水仙花数",你让我怎么做呢?
 8         
 9         所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
10         举例:153就是一个水仙花数。
11         153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
12 
13         A:三位数其实是告诉了我们范围。
14         B:通过for循环我们就可以实现获取每一个三位数
15           但是麻烦是如何获取这个三位数的个,十,百位上的数据
16           
17           我们如何获取一个数据的个,十,百呢?
18             假设有个一个数据:153
19             ge:    153%10 = 3
20             shi: 153/10%10 = 5
21             bai:153/10/10%10 = 1
22             qian:x/10/10/10%10
23             wan:  x/10/10/10/10%10
24             ...
25 
26         C:让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
27           如果相同,就把该数据在控制台输出。
28 */
29 class ForDemo6 {
30     public static void main(String[] args) {
31         //三位数其实是告诉了我们范围。
32         for(int x=100; x<1000; x++) {
33             int ge = x%10;
34             int shi = x/10%10;
35             int bai = x/10/10%10;
36             
37             //让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较
38             if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
39                 //如果相同,就把该数据在控制台输出。
40                 System.out.println(x);
41             }
42         }
43     }
44 }

ForDemo7.java【回文数】

 1 /*
 2     练习:
 3         请在控制台输出满足如下条件的五位数
 4         个位等于万位
 5         十位等于千位
 6         个位+十位+千位+万位=百位
 7         
 8     分析:
 9         A:五位数就告诉了我们范围。
10         B:分解每一个五位数的个,十,百,千,万位上的数据
11         C:按照要求进行判断即可
12 */
13 class ForDemo7 {
14     public static void main(String[] args) {
15         //五位数就告诉了我们范围。
16         for(int x=10000; x<100000; x++) {
17             //分解每一个五位数的个,十,百,千,万位上的数据
18             int ge = x%10;
19             int shi = x/10%10;
20             int bai  = x/10/10%10;
21             int qian = x/10/10/10%10;
22             int wan = x/10/10/10/10%10;
23             
24             //按照要求进行判断即可
25             if((ge==wan) && (shi==qian) && (ge+shi+qian+wan==bai)) {
26                 System.out.println(x);
27             }
28         }
29     }
30 }

ForDemo8.java

 1 /*
 2     需求:统计”水仙花数”共有多少个
 3     
 4     分析:
 5         A:首先必须知道什么是水仙花数
 6             所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
 7             举例:153就是一个水仙花数。
 8             153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
 9         B:定义统计变量,初始化值是0
10         C:三位数告诉了我们范围,用for循环就可以搞定
11         D:获取每一个三位数的个,十,百的数据
12         E:按照要求进行判断
13         F:如果满足要求就计数。
14 */
15 class ForDemo8 {
16     public static void main(String[] args) {
17         //定义统计变量,初始化值是0
18         int count = 0;
19         
20         //三位数告诉了我们范围,用for循环就可以搞定
21         for(int x=100; x<1000; x++) {
22             //获取每一个三位数的个,十,百的数据
23             int ge = x%10;
24             int shi = x/10%10;
25             int bai = x/10/10%10;
26             
27             //按照要求进行判断
28             if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
29                 //如果满足要求就计数。
30                 count++;
31             }
32         }
33         
34         System.out.println("水仙花数共有"+count+"个");
35     }
36 }

ForDemo9.java

 1 /*
 2     需求:请统计1-1000之间同时满足如下条件的数据有多少个:
 3             对3整除余2
 4             对5整除余3
 5             对7整除余2
 6 
 7     分析:
 8         A:定义统计变量,初始化值是0
 9         B:1-1000之间是一个范围,用for很容易就可以实现。
10         C:每个数据要同时满足如下要求
11             x%3==2
12             x%5==3
13             x%7==2
14         D:如果满足条件,统计数据++即可,最后输出统计变量
15 */
16 class ForDemo9 {
17     public static void main(String[] args) {
18         //定义统计变量,初始化值是0
19         int count = 0;
20     
21         //1-1000之间是一个范围,用for很容易就可以实现。
22         for(int x=1; x<=1000; x++) {
23             /*
24                 每个数据要同时满足如下要求
25                 x%3==2
26                 x%5==3
27                 x%7==2
28             */
29             if(x%3==2 && x%5==3 && x%7==2) {
30                 count++;
31                 System.out.println(x);
32             }
33         }
34         
35         //输出数据
36         System.out.println("满足这样条件的数据共有:"+count+"个");
37     }
38 }

WhileDemo.java

 1 /*
 2     while循环的基本格式:
 3         while(判断条件语句) {
 4             循环体语句;
 5         }
 6         
 7         扩展格式:
 8         
 9         初始化语句;
10         while(判断条件语句) {
11              循环体语句;
12              控制条件语句;
13         }
14         
15         通过这个格式,我们就可以看到其实和for循环是差不多的。
16         
17         for(初始化语句;判断条件语句;控制条件语句) {
18             循环体语句;
19         }
20 */
21 class WhileDemo {
22     public static void main(String[] args) {
23         //输出10次"HelloWorld"
24         //for语句版
25         for(int x=0; x<10; x++) {
26             System.out.println("HelloWorld");
27         }
28         System.out.println("--------------");
29         //while语句版
30         int x=0;
31         while(x<10) {
32             System.out.println("HelloWorld");
33             x++;
34         }
35         
36     }
37 }

WhileDemo2.java

 1 /*
 2     练习:用while循环实现
 3     左边:求出1-100之和
 4     右边:统计水仙花数有多少个
 5     
 6     初始化语句;
 7     while(判断条件语句) {
 8          循环体语句;
 9          控制条件语句;
10     }
11     
12     
13     
14     for(初始化语句;判断条件语句;控制条件语句) {
15         循环体语句;
16     }
17 
18 */
19 class WhileDemo2 {
20     public static void main(String[] args) {
21         //求出1-100之和
22         //for语句版本
23         int sum = 0;
24         
25         for(int x=1; x<=100; x++) {
26             sum+=x;
27         }
28         
29         System.out.println("sum:"+sum);
30         System.out.println("--------");
31         //while语句版本
32         int sum2 = 0;
33         
34         int y=1;
35         while(y<=100) {
36             sum2+=y;
37             y++;
38         }
39         
40         System.out.println("sum2:"+sum2);
41         System.out.println("--------");
42     }
43 }

WhileDemo3.java

 1 /*
 2     需求:统计水仙花数有多少个
 3 */
 4 class WhileDemo3 {
 5     public static void main(String[] args) {
 6         //for循环版本
 7         int count = 0;
 8         
 9         for(int x=100; x<1000; x++) {
10             int ge = x%10;
11             int shi = x/10%10;
12             int bai = x/10/10%10;
13             
14             if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == x) {
15                 count++;
16             }
17         }
18         
19         System.out.println("count:"+count);
20         System.out.println("------------");
21         
22         //while循环版本
23         int count2 = 0;
24         
25         int y = 100;
26         while(y<1000) {
27             int ge = y%10;
28             int shi = y/10%10;
29             int bai = y/10/10%10;
30             
31             if((ge*ge*ge+shi*shi*shi+bai*bai*bai) == y) {
32                 count2++;
33             }
34             
35             y++;
36         }
37         
38         System.out.println("count2:"+count2);
39     }
40 }

WhileDemo4.java

 1 /*
 2     while循环和for循环的区别?
 3         使用区别:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
 4                   因为变量及早的从内存中消失,可以提高内存的使用效率。
 5                   
 6         其实还有一种场景的理解:
 7             如果是一个范围的,用for循环非常明确。
 8             如果是不明确要做多少次,用while循环较为合适。
 9                 举例:吃葡萄。
10 */
11 class WhileDemo4 {
12     public static void main(String[] args) {
13         //for循环实现
14         for(int x=0; x<10; x++) {
15             System.out.println("学习Java技术哪家强,中国北京传智播客");
16         }
17         //这里不能在继续访问了
18         //System.out.println(x);
19         
20         //while循环实现
21         int y = 0;
22         while(y<10) {
23             System.out.println("学习Java技术哪家强,中国北京传智播客");
24             y++;
25         }
26         //这里是可以继续访问的
27         System.out.println(y);
28     }
29 } 

WhileDemo5.java

 1 /*
 2     我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
 3     请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
 4 
 5     分析:
 6         A:定义一个统计变量,默认值是0
 7         B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度
 8           我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
 9         C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
10           折叠一次有什么变化呢?就是厚度是以前的2倍。
11         D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
12         E:输出统计变量。
13 */
14 
15 class WhileDemo5 {
16     public static void main(String[] args) {
17         //定义一个统计变量,默认值是0
18         int count = 0;
19         
20         //最高山峰是珠穆朗玛峰:8848m这是最终的厚度
21         //我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
22         //为了简单,我把0.01变成1,同理8848就变成了884800
23         int end = 884800;
24         int start = 1;
25         
26         while(start<end) {
27             //只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
28             count++;
29             
30             //折叠一次有什么变化呢?就是厚度是以前的2倍。
31             start *= 2;
32             
33             System.out.println("第"+count+"次厚度是"+start);
34         }
35         
36         //输出统计变量。
37         System.out.println("要叠"+count+"次");
38     }
39 }

DoWhileDemo.java

 1 /*
 2     do...while循环的基本格式:
 3         do {
 4             循环体语句;
 5         }while(判断条件语句);
 6         
 7         扩展格式;
 8         初始化语句;
 9         do {
10             循环体语句;
11             控制条件语句;
12         }while(判断条件语句);
13 */
14 class DoWhileDemo {
15     public static void main(String[] args) {
16         //输出10次HelloWorld。
17         int x = 0;
18         do {
19             System.out.println("HelloWorld");
20             x++;
21         }while(x<10);
22         
23         System.out.println("--------------");
24         
25         //求和1-100
26         int sum = 0;
27         int a = 1;
28         do {
29             sum += a;
30             a++;
31         }while(a<=100);
32         
33         System.out.println(sum);
34     }
35 }

DoWhileDemo2.java

 1 /*
 2     循环语句的区别:
 3         do...while循环至少执行一次循环体。
 4         而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
 5         
 6     那么,我们一般使用哪种循环呢?
 7         优先考虑for,其次考虑while,最后考虑do...while
 8 */
 9 class DoWhileDemo2 {
10     public static void main(String[] args) {
11         int x = 3;
12         while(x < 3) {
13             System.out.println("我爱林青霞");
14             x++;
15         }
16         
17         System.out.println("--------------");
18         
19         int y = 3;
20         do {
21             System.out.println("我爱林青霞");
22             y++;
23         }while(y < 3);
24     }
25 }

DoWhileDemo3.java

 1 /*
 2     注意死循环:
 3         A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
 4         B:两种最简单的死循环格式
 5             while(true){...}
 6             for(;;){...}
 7             
 8 */
 9 class DoWhileDemo3 {
10     public static void main(String[] args) {
11         int x = 0;
12         while(x < 10) {
13             System.out.println(x);
14             x++;
15         }
16         System.out.println("--------------");
17         
18         /*
19         while(true) {
20             System.out.println("今天我很高兴,学习了死循环");
21         }
22         */
23         
24         for(;;){
25             System.out.println("今天我很高兴,学习了死循环");
26         }
27         
28         //System.out.println("--------------");
29     }
30 }

循环的嵌套

ForForDemo.java

 1 /*
 2     需求:请输出一个4行5列的星星(*)图案。
 3     结果:
 4         *****
 5         *****
 6         *****
 7         *****
 8         
 9     循环嵌套:就是循环语句的循环体本身是一个循环语句。
10     
11     通过结果我们知道这样的一个结论:
12         外循环控制行数
13         内循环控制列数
14 */
15 class ForForDemo {
16     public static void main(String[] args) {
17         //原始做法
18         System.out.println("*****");
19         System.out.println("*****");
20         System.out.println("*****");
21         System.out.println("*****");
22         System.out.println("-------------");
23         
24         //虽然可以完成需求,但是不是很好
25         //如果是多行多列就会比较麻烦
26         //所以我们准备改进
27         //如何改进呢?
28         //我先考虑如何实现一行*的问题
29         //System.out.println("*****");
30         //我们要想的是如何实现一次输出一颗*的问题
31         //System.out.println("*");
32         //System.out.println("*");
33         //现在虽然可以一次一颗*,但是却换行了,我要求不能换行,怎么办呢?
34         //输出语句的另一种格式:System.out.print(); 这个是不带换行的
35         //System.out.print("*");
36         //System.out.print("*");
37         //System.out.print("*");
38         //System.out.print("*");
39         //System.out.print("*");
40         //如果我要在一行上打出多颗*,比较麻烦,而代码是重复的,所以我决定用循环改进
41         for(int x=0; x<5; x++) {
42             System.out.print("*");
43         }
44         //我们可以通过空的输出语句实现换行:System.out.println();
45         System.out.println();
46         
47         //既然我可以打出一行,我就可以打出第二行
48         for(int x=0; x<5; x++) {
49             System.out.print("*");
50         }
51         //我们可以通过空的输出语句实现换行:System.out.println();
52         System.out.println();
53     
54         //同理打出第三行,第四行
55         for(int x=0; x<5; x++) {
56             System.out.print("*");
57         }
58         //我们可以通过空的输出语句实现换行:System.out.println();
59         System.out.println();
60         
61         //既然我可以打出一行,我就可以打出第二行
62         for(int x=0; x<5; x++) {
63             System.out.print("*");
64         }
65         //我们可以通过空的输出语句实现换行:System.out.println();
66         System.out.println();
67         System.out.println("-----------------");
68         //同样的代码出现了4次,说明我们程序写的不好,用循环改进
69         for(int y=0; y<4; y++) {
70             for(int x=0; x<5; x++) {
71                 System.out.print("*");
72             }
73             //我们可以通过空的输出语句实现换行:System.out.println();
74             System.out.println();
75         }
76     }
77 }

ForForDemo2.java

/*
    需求:请输出下列的形状
        *
        **
        ***
        ****
        *****
*/
class ForForDemo2 {
    public static void main(String[] args) {
        //通过简单的观察,我们看到这是一个行是5,列数是变化的形状
        //我们先打印出一个5行5列的形状
        for(int x=0; x<5; x++) {
            for(int y=0; y<5; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
        
        System.out.println("--------------");
        
        //我们实现了一个5行5列的形状
        //但是这不是我们想要的
        //我们要的是列数变化的
        //列数是如何变化的呢?
        //第一行:1列    y=0,y<=0,y++
        //第二行:2列    y=0,y<=1,y++
        //第三行:3列    y=0,y<=2,y++
        //第四行:4列    y=0,y<=3,y++
        //第五行:5列    y=0,y<=4,y++
        //在看外循环x的变化,恰好就是x=0,1,2,3,4
        //所以这个最终版的程序就是如下
        for(int x=0; x<5; x++) {
            for(int y=0; y<=x; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

ForForDemo3.java

 1 /*
 2     需求:在控制台输出九九乘法表。
 3     
 4     首先我们写出九九乘法表:
 5         1*1=1
 6         1*2=2    2*2=4
 7         1*3=3    2*3=6    3*3=9
 8         1*4=4    2*4=8    3*4=12    4*4=16
 9         ...
10         1*9=9    2*9=18    3*9=27    ...
11         
12     我们先把这个九九乘法表看出是这样的一个形状:
13         *
14         **
15         ***
16         ****
17         *****
18         ******
19         *******
20         ********
21         *********
22         
23     注意:
24         '\x' x表示任意,这种做法叫转移字符。
25         
26         '\t'    tab键的位置
27         '\r'    回车
28         '\n'    换行
29 */
30 class ForForDemo3 {
31     public static void main(String[] args) {
32         for(int x=0; x<9; x++) {
33             for(int y=0; y<=x; y++) {
34                 System.out.print("*");
35             }
36             System.out.println();
37         }
38         System.out.println("--------------");
39         //为了使用数据,我们从1开始
40         for(int x=1; x<=9; x++) {
41             for(int y=1; y<=x; y++) {
42                 System.out.print(y+"*"+x+"="+y*x+"\t");
43             }
44             System.out.println();
45         }
46     }
47 }

 

3:控制跳转语句(掌握)
(1)break:中断的意思
A:用在循环和switch语句中,离开此应用场景无意义。
B:作用
a:跳出单层循环
b:跳出多层循环,需要标签语句的配合


(2)continue:继续
A:用在循环中,离开此应用场景无意义。
B:作用
a:跳出单层循环的一次,可以继续下一次
C:填空题
for(int x=1; x<=10; x++) {
if(x%3 == 0) {
//补齐代码
}
System.out.println("Java基础班");
}
如何让控制台输出2次:Java基础班
如何让控制台输出7次:Java基础班
如何让控制台输出13次:Java基础班


(3)return:返回
A:用于结束方法的,后面还会在继续讲解和使用。
B:一旦遇到return,程序就不会在继续往后执行。

BreakDemo.java

 1 /*
 2     控制跳转语句:
 3         break:中断
 4         continue:继续
 5         return:返回
 6     
 7     break:中断的意思
 8     使用场景:
 9         A:switch语句中
10         B:循环语句中。
11             (循环语句中加入了if判断的情况)
12         注意:离开上面的两个场景,无意义。
13         
14     如何使用呢?
15         A:跳出单层循环
16         B:跳出多层循环
17             要想实现这个效果,就必须知道一个东西。带标签的语句。
18             格式:
19                 标签名: 语句
20 */
21 class BreakDemo {
22     public static void main(String[] args) {
23         //在 switch 或 loop 外部中断
24         //break;
25         
26         //跳出单层循环
27         for(int x=0; x<10; x++) {
28             if(x == 3) {
29                 break;
30             }
31             System.out.println("HelloWorld");
32         }
33         
34         System.out.println("over");
35         System.out.println("-------------");
36         
37         wc:for(int x=0; x<3; x++) {
38             nc:for(int y=0; y<4; y++) {
39                 if(y == 2) {
40                     //break nc;
41                     break wc;
42                 }
43                 System.out.print("*");
44             }
45             System.out.println();
46         }
47     }
48 }

ContinueDemo.java

 1 /*
 2     continue:继续
 3     
 4     使用场景:
 5         循环中。离开此场景无意义。
 6         
 7     测试,找到和break的区别:
 8         break:跳出单层循环
 9         continue:跳出一次循环,进入下一次的执行
10         
11     练习题:
12         for(int x=1; x<=10; x++) {
13             if(x%3==0) {
14                 //在此处填写代码
15             }
16             System.out.println(“Java基础班”);
17         }
18         
19         我想在控制台输出2次:“Java基础班“
20             break;
21         我想在控制台输出7次:“Java基础班“
22             continue;
23         我想在控制台输出13次:“Java基础班“    
24             System.out.println(“Java基础班”);
25 
26 
27 */
28 class ContinueDemo {
29     public static void main(String[] args) {
30         for(int x=0; x<10; x++) {
31             if(x == 3) {
32                 //break;
33                 continue;
34             }
35             
36             System.out.println(x);
37         }
38     }
39 }

ReturnDemo.java

 1 /*
 2     return:返回
 3     
 4     其实它的作用不是结束循环的,而是结束方法的。
 5 */
 6 class ReturnDemo {
 7     public static void main(String[] args) {
 8         for(int x=0; x<10; x++) {
 9             if(x == 2) {
10                 System.out.println("退出");
11                 //break;
12                 //continue;
13                 return;
14             }
15             
16             System.out.println(x);
17         }
18         
19         System.out.println("over");
20     }
21 }

 

  WhileDemo.java

 1 /*
 2     需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,
 3           每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
 4           请问,经过多少天,小芳才可以存到100元钱。
 5 
 6     分析:
 7         A:小芳的妈妈每天给她2.5元钱
 8             double dayMoney = 2.5;
 9         B:她都会存起来
10             double daySum = 0;
11         C:从第一天开始存储
12             int dayCount = 1;
13         D:经过多少天,小芳才可以存到100元钱。
14             double result = 100;
15         E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,
16             说明要判断dayCount的值,如果对5整除就减去6元钱。
17                 daySum -= 6;
18           由此还隐含了一个问题,就是如果不是5的倍数天的话,钱要累加
19                 daySum += dayMoney;
20         F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。
21 */
22 class WhileDemo {
23     public static void main(String[] args) {
24         //每天要存储的钱是2.5元
25         double dayMoney = 2.5;
26         
27         //存钱的初始化值是0
28         double daySum = 0;
29         
30         //从第一天开始存储
31         int dayCount = 0;
32         
33         //最终存储不小于100就不存储了
34         int result = 100;
35         
36         //因为不知道是多少天,所以我用死循环,
37         while(true) {
38             //天数变化
39             dayCount++;
40             
41             //累加钱
42             daySum += dayMoney;
43             
44             if(dayCount%5 == 0) {
45                 //花去6元钱
46                 daySum -= 6;
47                 System.out.println("第"+dayCount+"天花了6元钱");
48             }
49             
50             //一旦超过100元我就退出循环。
51             if(daySum >= result) {
52                 System.out.println("共花了"+dayCount+"天存储了100元");
53                 break;
54             }       
59         }
60     }
61 }

 使用while循环改写:

注意:不要把result 的数据类型改为int,否则result += 2.5会把结果强制转为int

public class OperatorDemo {
    public static void main(String[] args) {
        double result = 0;
         int  count = 0;
        while(result < 100){
            count ++;
            result +=2.5;
            
            if ( count % 5 == 0){

                result -=6;
            }
            System.out.println("第"+count+"天"+"存了"+result);
        }
        System.out.println(count);
    }

}

 

posted on 2015-08-01 22:15  super90  阅读(260)  评论(0编辑  收藏  举报

导航