天天看点

Java学习记录 Day3(选择结构、循环结构)

文章目录

  • ​​Day 3​​
  • ​​程序的执行流程​​
  • ​​Scanner​​
  • ​​if(选择结构)​​
  • ​​switch case(选择结构)​​
  • ​​for(循环结构)​​
  • ​​for循环的经典算法(水仙花数,星星三角形,九九乘法表)​​
  • ​​while(循环结构)​​
  • ​​do while(循环结构)​​
  • ​​三种循环结构的区别​​
  • ​​break​​
  • ​​continue​​

Day 3

2019年3月30日。

这是我学习Java的第三天。

这一天,我学到了以下的知识。

程序的执行流程

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。

也就是说程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。

而且,很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。

程序的执行流程分为三类:

  1. 顺序结构:代码从上往下一行一行去执行。
  2. 选择结构:也被称为分支结构。

    选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

  3. 循环结构:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

Scanner

Java提供的类,可以同来获取从键盘中输入的数据。

使用步骤分为以下三步:

  1. 导入程序包:​

    ​import java.util.Scanner;​

  2. 创建键盘录入对象:​

    ​Scanner a = new Scanner(System.in);​

  3. 录入输入的数据:​

    ​int b = a.nextInt();​

if(选择结构)

if语句是条件选择语句,具有以下三种格式。

格式一:if

if(比较表达式或者是boolean类型的值) {
        语句体;
    }
    /*执行流程
    先计算比较表达式的值,看其返回值是true还是false。
        如果是true,就执行语句体;
        如果是false,就不执行语句体;*/      

格式二:if-else

if(比较表达式) {
        语句体1;
      }else {
        语句体2;
      }

  //注意事项:else后面是没有比较表达式的,只有if后面有。
  /*执行流程
  首先计算比较表达式的值,看其返回值是true还是false。
  如果是true,就执行语句体1;
  如果是false,就执行语句体2;*/      

格式三:if-else if-else

if(比较表达式1) {
            语句体1;
        }else if(比较表达式2) {
            语句体2;
        }else if(比较表达式3) {
            语句体3;
        }
        ...
        else {
            语句体n+1;
        }
    //注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
    /*执行流程
    首先计算比较表达式1看其返回值是true还是false,
    如果是true,就执行语句体1,if语句结束。
    如果是false,接着计算比较表达式2看其返回值是true还是false,
    
    如果是true,就执行语句体2,if语句结束。
    如果是false,接着计算比较表达式3看其返回值是true还是false,
    ...
    
    如果都是false,就执行语句体n+1。*/      

if和三元表达式的区别:

  1. 三元表达式写出来的,if-else一定写的出来。
  2. if-else写出来的,三元表达式不一定写出来。

switch case(选择结构)

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

格式如下:

switch语句的格式
        switch(表达式){
            case 值1:
                语句体1;
                break;
            case 值2:
                语句体2;
                break;
            case 值3:
                语句体3;
                break;
            ....
            default:    
                语句体n+1;
                break;
        }
    /*  switch语句的格式解释
    (1):switch表示这是switch语句
        表达式的取值:byte,short,int,char
        JDK5以后可以是枚举(什么是枚举,以后再讲)
        JDK7以后可以是String
    (2):case后面跟的是要和表达式进行比较的值
    (3):语句体部分可以是一条或多条语句
    (4):break表示中断,结束的意思,可以结束switch语句
    (5):default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似*/
    /*执行流程
    先计算表达式的值
    然后和case后面的匹配,如果匹配成功就执行对应的语句,遇到break就会结束,否则执行default控制的语句*/      

面试题:byte可以作为switch的表达式吗?

long可以作为switch的表达式吗?

String可以作为switch的表达式吗?

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。

所以,byte、String均可以作为switch的表达式,而long不可以作为switch的表达式。

for(循环结构)

for循环执行的次数是在执行前就确定的。

格式如下:

for(初始化表达式语句;判断条件语句;控制条件语句) {
        循环体语句;
    }
    //注意事项:初始化表达式语句只执行一次
    /*执行流程:
    a:执行初始化表达式语句
    b:执行判断条件语句,看其返回值是true还是false
        如果是true,就继续执行
        如果是false,就结束循环
    c:执行循环体语句;
    d:执行控制条件语句
    e:回到B继续。*/
    //循环嵌套之后,外层循环控制行数,里层循环控制列数      

for循环的经典算法(水仙花数,星星三角形,九九乘法表)

  • 水仙花数

    所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。

    举例:153就是一个水仙花数。

    153 = 111 + 555 + 333 = 1 + 125 + 27 = 153

    代码如下:

public class FlowerNumber {
                public static void main(String args[]){
                    int a;
                    int b;
                    int c;
                    for (int i = 100 ; i <= 999 ; i++){
                       /*for (a = 1 ; a <= 9 ; a ++){
                            for (b = 0 ; b <= 9 ; b++){
                                for (c = 0 ; c <= 9 ; c++){
                                    if ((a * a * a) + (b * b * b) + (c * c * c) == a * 100 + b * 10 + c && i == a * 100 + b * 10 + c){
                                        System.out.println(a * 100 + b * 10 + c);
                                    }
                                }
                            }
                        }*//* 方法一  循环嵌套法*/
                       /*a = (i / 100);
                       b = (i % 100) / 10;
                       c = (i % 10);
                       if ((a * a * a) + (b * b * b) + (c * c * c) == a * 100 + b * 10 + c){
                           System.out.println(i);
                       }*//*方法二 取位数法*/
                    }
                }
            }      

运行效果:

Java学习记录 Day3(选择结构、循环结构)
  • 星星三角形

    用*绘制一个直角三角形(5x5)。

    代码如下:

public class PaintStar {
        public static void main(String args[]){
            for (int i = 0 ; i < 5 ; i++){
                for (int j = 0 ; j <= i ; j++){
                    System.out.print("*");
                }
                System.out.println();
            }
        } }      

运行效果:

Java学习记录 Day3(选择结构、循环结构)
  • 九九乘法表

    绘制一个九九乘法表。

    代码如下:

public class chengfabiao {
            public static void main(String args[]){
                for (int i = 1 ; i < 10 ; i++){
                    for (int j = 1 ; j <= i ; j++){
                        System.out.print(j + "*" + i + "=" + (j * i) + "\t");
                    }
                    System.out.println();
                }
            }
        }      

运行效果:

Java学习记录 Day3(选择结构、循环结构)

while(循环结构)

while是最基本的循环。

格式为:

;
            while(判断条件语句) {
                 循环体语句;
                 控制条件语句;
           }
    /*执行流程:
    a:执行初始化条件语句;
    b:执行判断条件语句,看其返回值是true还是false
        如果是true,就继续执行
        如果是false,就结束循环
    c:执行循环体语句;
    d:执行控制条件语句
    e:回到b继续。*/      

do while(循环结构)

对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。

;
            do {
                循环体语句;
                控制条件语句;
            }while(判断条件语句);
    /*执行流程:
    a:执行初始化条件语句;
    b:执行循环体语句;
    c:执行控制条件语句;
    d:执行判断条件语句,看其返回值是true还是false
        如果是true,就继续执行
        如果是false,就结束循环
    e:回到b继续。*/      

三种循环结构的区别

  1. do…while循环至少执行一次循环体。

    而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

  2. A: 如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。

    因为变量及早的从内存中消失,可以提高内存的使用效率。

    B:建议优先考虑for循环,然后是while循环 ,最后是do…while循环。

break

中断循环。可以用在Switch语句,也可以用在for,while循环中,用来结束循环。若离开了使用场景(switch,for,while)则没有意义。如果有循环嵌套,break影响的是最近的循环。

例题:试判断输出结果

for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
    if (i == j) {
    break;
    }
    System.out.println("i=" + i + ", j=" + j);
    }
    }      

解:①结果:i=1, j=0

i=2, j=0

i=2, j=1

②(1)第一次外层for循环:i=0,因为0<3,所以执行内层的for循环。

第一次内层for循环:i=0,j=0,因为0 == 0,所以结束循环。

(2)第二次外层for循环:i=1,因为1<3,所以执行内层的for循环。

第一次内层for循环:i=1,j=0,因为1!=0,所以输出i=1,j=0。

第二次内层for循环:i=1,j=1,因为1 == 0,所以结束循环。

(3)第三次外层for循环:i=2,因为2<3,所以执行内层的for循环。

第一次内层for循环:i=2,j=0,因为2!=0,所以输出i=2,j=0。

第二次内层for循环:i=2,j=1,因为2!=1,所以输出i=2,j=1。

第三次内层for循环:i=2,j=2,因为2==2,所以结束循环。

(4)第四次外层for循环:i=3,因为3=3,所以结束循环。

continue

用在循环场景当中,可以跳过部分循环而不终端,离开循环场景后无意义。

for (int i=0; i<3; i++) {
    for (int j=0; j<3; j++) {
    if (i == j) {
    continue;
    }
    System.out.println("i=" + i + ", j=" + j);
    }
    }