03_分支和循环

Day04笔记

课程内容

1、键盘录入

2、分支结构

3、循环结构

键盘录入

概述

1、键盘录入:在程序运行过程中,可以通过键盘录入的数据,修改程序中的变量,决定程序运行的走向。

2、步骤:

        1、导包

                在class类声明的上面,写一个导包语句

                import java.util.Scanner;

        2、创建键盘录入对象

                Scanner sc = new Scanner(System.in);

        3、调用键盘录入对象sc的nextInt方法,从键盘获取一个int类型的数据

                int x = sc.nextInt();

代码示例

//在class类声明的上方,导包

import java.util.Scanner;

class Demo02_键盘录入 {

         public static void main(String[] args) {

                  //创建键盘录入对象

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入一个整数");

                  //声明变量,接收键盘的录入数据,调用键盘录入对象的nextInt方法

                  int x = sc.nextInt();

                  System.out.println("录入的数据是:" + x + ", 这个数字的平方是:" + x*x);

         }

}

练习1

键盘录入两个整数,计算两个数字的和

代码示例

import java.util.Scanner;

class Demo03_键盘录入练习1_求和 {

         //键盘录入两个整数,计算两个数字的和

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入第一个整数");

                  int x = sc.nextInt();

                  System.out.println("请录入第二个整数");

                  int y = sc.nextInt();

                  int sum = x + y;

                  System.out.println("两者之和:" + sum);

         }

}

代码示例

import java.util.Scanner;

class Demo03_键盘录入练习1_求和 {

         //键盘录入两个整数,计算两个数字的和

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入第一个整数");

                  int x = sc.nextInt();

                  System.out.println("请录入第二个整数");

                  int y = sc.nextInt();

                  int sum = x + y;

                  System.out.println("两者之和:" + sum);

         }

}

练习2

键盘录入三个整数,获取三个整数的最小值

代码示例

import java.util.Scanner;

class Demo04_键盘录入练习2_求最值 {

         //键盘录入三个整数,获取三个整数的最小值

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入第一个整数");

                  int x = sc.nextInt();

                  System.out.println("请录入第二个整数");

                  int y = sc.nextInt();

                  System.out.println("请录入第三个整数");

                  int z = sc.nextInt();

 

                  int min = x < y ? (x < z ? x : z) : (y < z ? y : z);

 

                  System.out.println("三者的最小值为:" + min);

         }

}

练习3

键盘录入一个整数,判断这个整数的奇偶

代码示例

import java.util.Scanner;

class Demo05_键盘录入练习3_奇偶 {

         //键盘录入一个整数,判断这个整数的奇偶

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入要判断奇偶的整数");

                  int x = sc.nextInt();

                  System.out.println("这个数字是" + (x % 2 == 0 ? "偶" : "奇") + "数");

         }

}

分支结构

流程控制

1、在一个程序中,有很多代码,代码执行的顺序的控制,就叫流程控制

2、流程结构:

        1、顺序结构:从上到下、从左到右依次执行。你写多少代码,就执行多少代码

        2、分支结构:到达某个程序运行点,根据程序运行情况的不同,可能会有两个运行的逻辑,但是程序的某一次运行只能走其中的一个逻辑。提前需要把各个逻辑都准备好。你写的代码多,jvm运行的代码少

        3、循环结构:某段相同或者相似,具有某些规律的代码,需要反复执行。通过某种格式来控制让代码反复执行。写的代码少,系统运行的代码多。

分支结构概述

1、准备多种情况的代码,只运行其中一种

2、分支结构的语句:

        1、if语句【常用】

        2、switch语句

if语句的第一种格式

1、格式:

        if (表达式) {

          语句体;

}

2、说明:

        1、表达式:必须是boolean类型的表达式

        2、语句体:可以是任意语句,可以是一句、也可以是多句

3、执行流程:       

        1、计算表达式的值,要么为true、要么为false

        2、如果表达式计算结果为true,就执行语句体

        3、如果表达式计算结果为false,就不执行语句体

代码示例

import java.util.Scanner;

class Demo06_if语句的第一种格式 {

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入您的年龄");

                  int age = sc.nextInt();

                  //判断这个年龄是否成年

                  if (age >= 18) {

                           System.out.println("可以观看此影片");

                  }

 

                  System.out.println("完了");

 

         }

}

if语句的注意事项

1、表达式必须是boolean类型的计算结果;表达式只要计算结果为boolean类型,就算合法

2、左大括号之前,不要加分号,否则if的判断就会提前结束。一般情况,有分号,就没有左大括号,如果有左大括号,就没有分号

3、语句体可以是一句,也可以是多句,如果是一句的时候,可以将大括号省略掉。建议不要省略大括号。

代码示例

class Demo07_if语句的注意事项 {

         public static void main(String[] args) {

                  boolean flag = false;

                  //只要计算结果为boolean类型,就是合法

                  if (flag = true) {

                           System.out.println(flag);

                  }

 

                  int age = 2;

                  if (age > 18);{//如果前面加上了分号,就无法控制语句体是否执行

                           System.out.println(age);

                  }

 

                  int a = -10;

                  if (a > 0)

                           System.out.println(a);

                           System.out.println(666);//不加大括号,if只能控制一句话

 

                  int b = 10;

                  if (b > 0)

                           //int c = b + 20;编译报错,尽量不要省略大括号

         }

}

 

if语句的第二种格式

1、格式:

        if (表达式) {

                语句体1;

} else {

         语句体2;

}

2、说明:

        1、if单词的含义是:如果

        2、else单词含义:其他的,不满足如果的条件

3、执行流程:       

        1、计算表达式的值,要么为true、要么为false

        2、如果表达式的值为true,就执行语句体1

        3、如果表达式的值为false,就执行语句体2

4、说明:

        1、是否有可能语句体1和语句体2都执行?不可能,只要碰到了右大括号,if语句就结束了

        2、是否有可能语句体1和语句体2都不执行?不可能,else中包含了所有不满足表达式的情况,语句体1和语句体2一定会有一句执行

        3、三元表达式是从两个数据中二选一;if语句的第二种格式,从两组语句中二选一

代码示例

import java.util.Scanner;

class Demo08_if语句的第二种格式 {

         public static void main(String[] args) {

                  System.out.println("万岁爷,时辰不早了,该歇息了");

                  Scanner sc = new Scanner(System.in);

                  int x = sc.nextInt();

                  if (x == 1) {

                           System.out.println("王皇后准备");

                  } else {

                           System.out.println("萧淑妃准备");

                  }

         }

}

if语句的第三种格式

1、格式:

        if (布尔表达式1) {

                  语句体1;

} else if (布尔表达式2) {

         语句体2;

} else if (布尔表达式3) {

         语句体3;

}

.....

} else if (布尔表达式n) {

         语句体n;

} else {

         语句体n+1;

}

2、执行流程:

        1、计算布尔表达式1的值,要么为true、要么为false

        2、布尔表达式1如果为true,执行语句体1,if语句就结束了

3、布尔表达式1如果为false,就计算布尔表达式2

4、以此类推

5、如果布尔表达式1~布尔表达式n全都计算为false,就执行语句体n+1

3、说明:      

        1、最后一个else,可以有,也可以没有,如果有就一定会有一个执行的内容,如果没有就可能没有任何执行内容。

        2、如果没有else:是否有可能一个语句体都不执行?可能,因为可能所有的判断条件都为假。是否可能执行多个语句体?任意一个布尔表达式判断为true,就执行对应的语句体,一旦执行完,就碰到了右大括号,整个if就结束了

        3、如果有else:是否有可能一个语句体都不执行?不可能,因为else就包含了所有布尔表达式判断为假的情况,所以一定会执行其中一句。是否可能执行多个语句体?不可能

代码示例1

import java.util.Scanner;

class Demo09_if语句的第三种格式 {

         public static void main(String[] args) {

                  System.out.println("万岁爷,时辰不早了,该歇息了");

                  Scanner sc = new Scanner(System.in);

                  int x = sc.nextInt();

                  if (x == 1) {

                           System.out.println("王皇后准备");

                  } else if (x == 2) {

                           System.out.println("萧淑妃准备");

                  } else if (x == 3) {

                           System.out.println("武昭仪准备");

                  } else {

                           System.out.println("太少了,该选秀了。。");

                  }

         }

}

代码示例2

import java.util.Scanner;

class Demo10_if语句第三种格式没有else的情况 {

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  int x = sc.nextInt();

                  int y;

                  if (x > 0) {

                           y = 1;

                  } else if (x == 0) {

                           y = 0;

                  } else if (x <0) {

                           y = -1;

                  }

                  //上面的if语句没有else,所以可能三个语句体都不执行

                  //可能y就没有被赋值,因此会编译报错,可能尚未初始化变量y

                  //System.out.println("x=" + x + ", y=" + y);

 

 

                  int m = sc.nextInt();

                  int n;

                  if (m > 0) {

                           n = 1;

                  } else if (m == 0) {

                           n = 0;

                  } else {

                           n = -1;

                  }

 

                  System.out.println("m=" + m + ", n=" + n);

         }

}

switch语句

1、格式:

        switch (表达式) {

        case 常量1:

                语句体1;

                break;

                case 常量2:

                        语句体2;

                        break;

                ....

                case 常量n:

                        语句体n;

                        break;

                default:

                        语句体n+1;

}

2、执行流程:

        1、计算表达式的值

        2、分别和各个常量匹配,如果和常量1相等,就执行语句体1,执行break,整个switch语句就结束了

        3、如果和常量1不相等,那么就判断是否和常量2相等,如果相等就执行语句体2,执行break,整个switch语句结束

        4、以此类推,如果常量1~常量n都和表达式的值不相等,就执行default中的语句体n+1,switch结束

3、解释:

        1、switch:开关

        2、case:情况

        3、break:破坏,结束

        4、default:默认的,缺省的

代码示例

import java.util.Scanner;

class Demo11_switch语句 {

         public static void main(String[] args) {

                  System.out.println("请录入一个星期几的数字1-7");

                  Scanner sc = new Scanner(System.in);

                  int week = sc.nextInt();

                  switch (week) {

                           case 1:

                                    System.out.println("星期一");

                                    break;

                           case 2:

                                    System.out.println("星期二");

                                    break;

                           case 3:

                                    System.out.println("星期三");

                                    break;

                           case 4:

                                    System.out.println("星期四");

                                    break;

                           case 5:

                                    System.out.println("星期五");

                                    break;

                           case 6:

                                    System.out.println("星期六");

                                    break;

                           case 7:

                                    System.out.println("星期天");

                                    break;

                           default:

                                    System.out.println("请回到火星上");

                  }

         }

}

switch语句的注意事项

1、表达式:

        1、一般是一个变量(如果是常量,编译不会报错,但是没有意义)

        2、表达式的数据类型:

                byte、short、char、int、枚举类型(jdk1.5)、String(jdk7)

2、case:

        1、case后面必须跟着的是常量,不能是变量

        2、case后面跟着的常量的数据类型,必须和表达式的数据类型一致

3、break:

        1、作用是跳出switch语句

        2、break语句如果没写,那么会发生case穿透现象,这个case中的内容执行完,不会结束switch语句,也不会判断下一个case是否匹配,而是直接执行下一个case中的语句体

        3、switch语句结束的条件:1、碰到了break语句;2、碰到了右大括号

4、default:

        1、作用:描述默认、缺省的情况,相当于if语句中的最后一个else

        2、default语句可以不写,没有了默认缺省的情况,相当于if语句不写最后一个else,建议写上

        3、default语句位置可以写在switch语句的任意位置,但是无论写在什么位置,都是最后匹配。建议写在最后

代码示例

class Demo12_switch语句的注意事项 {

         public static void main(String[] args) {

                  int x = 10;

                  /*long g = 100;

                  String str = "a";

                  switch (str) {

                           case 666:

 

                  }

 

                  switch (x) {

                           case 10:

                                    System.out.println("匹配到了10");

                           case 11:

                                    System.out.println("匹配到了11");

                           case 12:

                                    System.out.println("匹配到了12");

                                    break;

                  }*/

 

 

                  switch (x) {

                           default:

                                    System.out.println("匹配到了default");

                                    break;

                           case 11:

                                    System.out.println("匹配到了11");

                  }

         }

}

练习

键盘录入一个月份,输出这个月份所在的季节

代码示例

import java.util.Scanner;

class Demo13_switch语句练习 {

         //键盘录入一个月份,输出这个月份所在的季节

         public static void main(String[] args) {

                  Scanner sc = new Scanner(System.in);

                  System.out.println("请录入一个月份");

                  int month = sc.nextInt();

                  switch (month) {

                           case 3:

                           case 4:

                           case 5:

                                    System.out.println("春季");

                                    break;

                           case 6:

                           case 7:

                           case 8:

                                    System.out.println("夏季");

                                    break;

                           case 9:

                           case 10:

                           case 11:

                                    System.out.println("秋季");

                                    break;

                           case 12:

                           case 1:

                           case 2:

                                    System.out.println("冬季");

                                    break;

                           default:

                                    System.out.println("录入非法,请重来");

                  }

         }

}

switch语句和if语句的比较

1、switch语句和if语句都是用于实现分支结构的流程设计

2、if语句相对比较灵活,功能相对强大;switch语句相对固定,功能也收到一定限制

3、if语句更适合判断一些条件、判断一些范围、判断一些连续性的条件;switch语句更适合判断一些离散性的数据和条件。

4、if语句每次在判断的时候,都需要获取一次表达式的值,所以效率较低;switch语句只计算一次表达式的值,所以效率较高。

代码示例

class Demo14_if和switch的区别 {

         public static void main(String[] args) {

                  int x = 4;

                  /*if (x * x > 100) {

                           System.out.println("大数字");

                  } else if (x * x < 10) {

                           System.out.println("小数字");

                  } else {

                           System.out.println("普通数字");

                  }*/

 

                  switch (x * x) {

                           case 100:

                                    System.out.println("是一个大数字");

                                    break;

                           case 16:

                                    System.out.println("是一个普通数字");

                                    break;

                  }

         }

}

循环结构

概述

1、对于某些需要重复执行的代码,不希望频繁的复制粘贴,jdk提供了一些格式,简化代码的书写。

2、实现的语句:

        for语句【常用】

        while语句【常用】

        do...while语句

for语句

1、格式:

        for ( 初始化语句; 循环条件表达式 ; 初始化变量的自增) {

                循环体语句;

}

2、执行流程:

        1、初始化语句

        2、计算循环条件表达式,要么为true、要么为false

        3、如果计算条件表达式的结果为false,for循环就结束了

        4、如果计算条件表达式的结果为true,执行循环体语句

        5、执行初始化变量的自增,回到第2步

3、注意事项:

        1、初始化语句:

                一般是声明一个用于控制循环次数的计数器

                初始化语句只执行一次

        2、循环条件表达式:

                必须是一个boolean类型的表达式

        3、循环体语句:

                在初始化变量自增之前,执行

        4、左大括号前面,不要加分号

        5、如果循环体语句只有一句,那么大括号可以省略掉,但是建议任何情况加上大括号

代码示例

class Demo15_for语句 {

         public static void main(String[] args) {

                  for (int i = 1; i <= 5; i++) {

                           System.out.println("Hello World!");

                  }

         }

}

练习1

输出数字1-5

class Demo16_输出1到5 {

         public static void main(String[] args) {

                  //循环的次数,是i,正好和我要打印的数字大小一致

                  for (int i =1; i <= 5; i++) {

                           System.out.println(i);

                  }

         }

}

练习2

输出数字5-1

class Demo17_输出5到1 {

         public static void main(String[] args) {

                  //循环5次,根据要输出的内容和i的关系,来完成

                  for (int i = 1; i <= 5; i++) {

                           //i = 1                          5

                           //i = 2                          4

                           System.out.println(6 - i);

                  }

 

                 

                  for (int i = 5; i >= 1; i--) {

                           System.out.println(i);

                  }

         }

}

练习3

计算1+2+3+...+99+100的和

class Demo18_计算1到100和 {

         /*

         求和思想:和在计算的过程中,是一个变量,需要声明一个变量记录求和过程中的值

 

         sum : 0

         sum = sum + 1  1

         sum = sum + 2  3

         sum = sum + 3  6

         sum = sum + 4  10

         */

         public static void main(String[] args) {

                  //将脑中的和变量,表现在程序中,表现在内存中,就是一个变量

                  int sum = 0;

                  //循环获取100个数字,加到sum上去

                  for (int i = 1; i <= 100; i++) {

                           sum += i;

                  }

                  //输出sum的值

                  System.out.println(sum);

         }

}

练习4

计算1-100的偶数和

class Demo19_计算1到100偶数和 {

         public static void main(String[] args) {

                  //第一种方式,获取1-100的所有数字,判断是否是偶数,如果是偶数,就加到和变量上去

                  int sum1 = 0;

                  for (int i = 1; i <= 100; i++) {

                           //判断i是否是偶数

                           if (i % 2 == 0) {

                                    sum1 += i;

                           }

                  }

                  System.out.println(sum1);

 

                  //第二种方式,获取所有的偶数

                  int sum2 = 0;

                  for (int i = 2; i <= 100; i += 2) {

                           sum2 += i;

                  }

                  System.out.println(sum2);

 

                  //第三种方式:等差数列求和

                  int sum3 = (2 + 100) * 50 / 2;

                  System.out.println(sum3);

         }

}

练习5

列举所有的水仙花数

水仙花数:是一个三位数,各个位上的数字的立方和,等于该数字本身

例如,153 = 1*1*1 + 5*5*5 + 3*3*3 = 153,则153是一个水仙花数

class Demo20_列举水仙花数 {

         /*

         列举所有的水仙花数

         水仙花数:是一个三位数,各个位上的数字的立方和,等于该数字本身

         例如,153 = 1*1*1 + 5*5*5 + 3*3*3 = 153,则153是一个水仙花数

 

         思路:

                  1、获取到所有的三位数

                  2、获取每个三位数的各个位上的数字

                  3、计算各个位上的数字的立方和

                  4、判断这个立方和是否和当前数字相等,如果相等,就输出

         */

         public static void main(String[] args) {

                  //获取所有的三位数

                  for (int i = 100; i <= 999; i++) {

                           //获取每个三位数的各个位上的数字

                           int ge = i % 10;

                           int shi = i / 10 % 10;

                           int bai = i / 100;

                           //计算各个位的立方和

                           int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;

                           if (sum == i) {//判断是否和当前数字相等

                                    System.out.println(i);

                           }

                  }

         }

}

练习6

统计水仙花数的个数

class Demo21_统计水仙花数个数 {

         public static void main(String[] args) {

                  int count = 0;//声明一个计数器,专门用于统计水仙花数的个数

                  for (int i = 100; i <= 999; i++) {

                           int ge = i % 10;

                           int shi = i / 10 % 10;

                           int bai = i / 100;

                           int sum = ge*ge*ge + shi*shi*shi + bai*bai*bai;

                           if (sum == i) {

                                    count++;//如果碰到了水仙花数,那么就让计数器自增

                           }

                  }

                  System.out.println(count);

         }

}

猜你喜欢

转载自www.cnblogs.com/man-tou/p/10635877.html