day 04-控制结构学习

Posted Yuri_D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day 04-控制结构学习相关的知识,希望对你有一定的参考价值。

第4章 程序控制结构

目录

  • 顺序
  • 分支(if else swith)
  • 循环(for, while, do while, 多重循环*)
  • break
  • contine
  • return

介绍

在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句。

  1. 顺序控制
  2. 分支控制
  3. 循环控制

顺序控制结构

  • 介绍:程序从上到下逐行地执行,中间没有任何判断和跳转。

  • 举例和注意事项

    Java中定义成员变量时采用合法的前向引用。如:

    public class Test
    int num1 = 12;
    int num2 = num1 + 2;
    
    //错误形式如下:
    public class Test
    int num2 = num1 + 2; 
    int num1 = 12;
    
    
  • 图示:中间没有判断,直接顺序走即可

分支控制结构

  • 介绍:让程序有选择的进行执行,分支控制有三种

  • 分类:1.单分支 2.双分支 3.多分支

单分支

  • 基本语法

    if(条件表达式) 
        执行代码块;(可以有多条语句.)
    
    
  • 说明:当条件表达式为ture时,就会执行中的代码。如果为false就不执行。

    特别说明:如果中只有一条语句,则可以不用,但是建议写上

  • 案例说明If01.java

    //编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出"你年龄大于18,要对自己的行为负责,送入监狱”
    package chapter05;
    import java.util.Scanner;//IDEA中自动导入了包
    public class If01 
        public static void main(String[] args) 
            //编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出"你年龄大于18,要对自己的行为负责,送入监狱
            //思路分析:1.定义一个Scanner对象,接收输入的年龄
            //2.把年龄保存到一个变量 int age
            //3.使用if判断,输出对应的信息
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入年龄");
            int age = scanner.nextInt();
            if (age > 18) 
                System.out.println("你年龄大于18,要对自己的行为负责,送入监狱");
            
            
            System.out.println("程序继续……");
    
            scanner.close();//记住关闭接收终端
        
    
    
  • 单分支流程图

双分支

  • 基本语法

    if(条件表达式) 
        执行代码块1;
    else 
        执行代码块2;
    
    
  • 说明:当条件表达式成立,即执行代码块1,否则执行代码块2。如果执行代码块只有一条语句,则可以省略,否则,不能省略。

  • 案例演示lf02.java

    //编写一个程序,可以输入人的年龄如果该同志的年龄大于18岁则输出"你年龄大于18,要对自己的行为负责,送入监狱。"否则,输出"你的年龄不大这次放过你了。"
    package chapter05;
    import java.util.Scanner;
    public class If02 
        public static void main(String[] args) 
    
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入年龄:");//新建键盘接收
    
            int age = scanner.nextInt();//保存年龄int变量
    
            if (age > 18) //进行if判断
                System.out.println("你年龄大于18,要对自己的行为负责,送入监狱。");
            else //双分支
                System.out.println("你的年龄不大这次放过你了。");
            
        
            System.out.println("程序继续……");
            scanner.close();
            
        
    
    
  • 双分支流程图

练习题1-单双

  1. 嵌套

    答案:韩顺平教育~

  2. 练习

    //lfExercise01.java
    //2.编写程序,声明2个double型变量并赋值。判断第1个数大于10.0,且第2个数小于20.0,打印两数之和
    //3.[课后自己练]定义两个变量int,判断两者的和,是否能被3又能被5整除,打印提示信息
    //4.判断一个年份是否是闰年,闰年的条件是符合下面二者之一:(1)年份能被4整除,但不能被100整除;(2)能被400整除
    int a = 12;
    int b = 34;
    if ((a+b) % 3 == 0 && (a + b) % 5 == 0) 
     System.out.println("和能被3和5整除");
    
    
    int years = 1;
    if((years % 4 ==0 && years % 100 != 0) 
       || years % 400 == 0) 
        System.out.println("闰年");
    
    
    

多分支

  • 基本语法

    if(条件表达式1) 
        执行代码块1;
    else if(条件表达式2) 
        执行代码块2;
    
    ......
    else
        执行代码块n;
    
    //特别说明:(1)多分支 可以没有else,如果所以的条件表达式都不成立,则一个执行入口都没有 (2)如果有else,如果所有的条件表达式都不成立,则默认执行else代码块
    
  • 说明

    1.当条件表达式1成立时,即执行代码块1;
    2.如果表达式1不成立,才去判断表达式2是否成立;
    3.如果表达式2成立,就执行代码块2;
    4.以此类推,如果所有的表达式都不成立;
    5.则执行else的代码块,注意,只能有一个执行入口。

  • 图示

练习题2-多

案例1

//案例lf03.java
/*
输入保国同志的芝麻信用分:
如果:
1.信用分为100分时,输出信用极好;
2.信用分为(30, 99]时,输出信用优秀;
3.信用分为[60,80]时,输出信用一般;
4.其它情况,输出信用不及格
5.请从键盘输入保国的芝麻信用分,并加以判断
*/
package chapter05;
import java.util.Scanner;
public class If03 
    public static void main(String[] args) 

        Scanner scanner = new Scanner(System.in);//接收数据

        System.out.println("请输入保国同志的芝麻信用分:");
        int grade = scanner.nextInt();//保存变量

        if (grade >=1 && grade <= 100)
        //限定范围-->此处还可以进行使用异常处理机制对输入的数据不是整数,而是hello进行处理!!!

            if (grade == 100) //多分支判断
                System.out.println("信用极好");
             else if (grade > 80 && grade <= 99) 
                System.out.println("信用优秀");
             else if (grade >= 60 && grade <= 80) 
                System.out.println("信用一般");
             else 
                System.out.println("信用不及格");
            

         else 
            System.out.println("输入数据不合法,请重新输入!");
        

        scanner.close();//接收关闭
        
    

案例2

//代码,看看输出什么?
boolean b = true;
if(b = false) // 如果写成if(b= false)能编译通过吗?如果能,结果是?-->因为if判断的括号里是false,判断结果就是错,括号里是true,结果就是对(此处为赋值)
System.out.println("a");
 else if(b) 
System.out.println("b");
 else if(!b) 
System.out.println("c");
 else 
System.out.println("d");

嵌套分支

  • 基本介绍
    在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。建议:不要超过3层(可读性不好)

  • 基本语法

    if() 
        if() 
            //if-else...
        else
            //if-else...
        
    
    
  • 案例1

    //参加歌手比赛,如果初赛成绩大于8.0进入决赛,否则提示淘汰。并且根据性别提示进入男子组或女子组。可以让学员先练习下,输入成绩和性别,进行判断和输出.Nestedlf.java
    //提示:double score;char gender;
    //接收字符:char gender = scanner.next().charAt(0)
    
    package chapter05;
    
    import java.util.Scanner;
    
    public class NestedIf 
        public static void main(String[] args) 
    
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入成绩:");
            double score = scanner.nextDouble();
            if (score > 8.0) 
    
                System.out.println("请输入性别:");
                char gender = scanner.next().charAt(0);//该处是如何将字符串转成一个字符!
                if (gender == '男') 
                    System.out.println("恭喜您进入男子组决赛!");
                 else if (gender == '女')
                    System.out.println("恭喜您进入女子组决赛!");
                 else 
                    System.out.println("输入类型有误,请重新输入!");
                
    
             else 
                System.out.println("很遗憾您被淘汰!");
            
    
            scanner.close();
    
        
    
    

switch分支

  • 基本语法
  1. switch(表达式) 
        case 常量1: //-->翻译就是当...
            语句块1;
            break;
        case 常量2:
            语句块2:
            break;
        ...
        case 常量n:
            语句块n; 
            break;
        default:
        default语句块;
            break;
    
    
  • switch说明
  1. switch关键字,表示swtich分支

  2. 有一个表达式就对应一个具体的返回值

  3. case 常量1:当表达式的值等于常量1,就执行语句块1

  4. break:表示退出swtich

  5. 如果和 case 常量1匹配,就执行语句块1,如果没有匹配,就继续匹配 case 常量2

  6. 如果一个都没有匹配上,执行default

  • 示意图
  1. 如果没有break会存在case穿透,执行完所有语句块!

  • 快速入门
  1. 案例Switch01.java

    //1.请编写个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g
    //2.a表示星期一,b表示星期二
    //3.根据用户的输入显示相应的信息要求使用switch语句完成
    package chapter05;
    
    import java.util.Scanner;
    
    public class Switch01 
        public static void main(String[] args) 
    
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个字符(a,b,c,d,e,f,g)");
            char input = scanner.next().charAt(0);
            //在Java中只要有值返回,就是一个表达式
            switch (input) 
                case 'a' :
                    System.out.println("今天是星期一");
                    break;
                case 'b' :
                    System.out.println("今天是星期二");
                    break;
                case 'c' :
                    System.out.println("今天是星期三");
                    break;
                default:
                    System.out.println("输入有误,没有匹配");
            
            System.out.println("退出switch,继续执行程序");
        
    
    
  • 细节讨论
  1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int

    char C = 'a';
    switch(c) 
        case 'a'://正确
            System.out.println("ok1");
        break;
        case "hello"://错误
            System.out.println("ok2");
        break;
        case 20://正确,可以进行转换
            System.out.println("ok2");
        break;
        default:
            System.out.println("ok3");
    
    
  2. switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)

    double d = 1.1;
    switch(d)//错误,不能使用浮点数,会造成精度下降
        case 1.1://错误
            System.out.println("ok2");
        break;
    
    
  3. case子句中的值必须是常量或者常量表达式(1,‘a’),而不能是变量

    char d = 'a';
    switch(d)
        case 'a'://正确,只能是常量或者常量表达式
            System.out.println("ok2");
        break;
        case d://错误,不能是变量
            System.out.println("ok3");
        break;
    
    
  4. default子句是可选的,当没有匹配的case时,默认执行default

  5. break语用来在执行完一个case分支后使程序跳出switch语句块,如果没有写break,程序会顺序执行到switch结尾,除非遇到break

练习题3-s

SwitchExercise.java

  1. 使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b, c, d, e。其它的输出"other"。
  2. 对学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。(注:输入的成绩不能大于100),提示成绩/60
  3. 根据用于指定月份,打印该月份所属的季节。3,4,5 春季;6,7,8夏季;9,10,11秋季;12,1,2冬季(提示使用穿透)
package chapter05;

import java.util.Scanner;

public class SwitchExercise 
    public static void main(String[] args) 
        //1. 使用switch把小写类型的char型转为大写(键盘输入)。只转换a,b, c, d, e。其它的输出"other"。
        /*
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个小写字母:");
        char c = scanner.next().charAt(0);
        switch (c) 
            case 'a':
                System.out.println('A');
                break;
            case 'b':
                System.out.println('B');
                break;
            case 'c':
                System.out.println('C');
                break;
            case 'd':
                System.out.println('D');
                break;
            case 'e':
                System.out.println('E');
                break;
            default:
                System.out.println("other");
        
        System.out.println("完成操作!");*/

        /*2.学生成绩大于60分的,输出"合格"。低于60分的,输出"不合格"。(注:输入的成绩不能大于100),提示 成绩/60
        思路分析:
        0.这道题,可以使用分支来完成,但是要求使用switch这里我们需要进行一个转换,编程思路
        1.如果成绩在[60,100] ,(int)(成绩/60) = 1
        2.如果成绩在[0,60) , (int)(成绩/60) = 0
         */
        /*
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学生成绩:");
        double score = scanner.nextDouble();
        if (score>=0 && score<= 100) 

            switch ((int)(score / 60)) 
                case 0:
                    System.out.println("不合格");
                    break;
                case 1:
                    System.out.println("合格");
                    break;
            
         else 
            System.out.println("输入成绩有误,请重新输入");
        
         */

        //3. 根据用户指定月份,打印该月份所属的季节。3,4,5 春季;6,7,8夏季;9,10,11秋季;12,1,2冬季(提示使用穿透)
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份(1-12):");
        int month = scanner.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("输入有误,请重新输入");
        
        scanner.close();
    

switch和if的比较

  1. 如果判断的具体数值不多,而且符合byte、short、 int、char、 enum、String这6种类型。虽然两个语句都可以使用,建议使用swtich语句。
  2. 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广

循环控制结构

for循环

  • 基本介绍:听其名而知其意,就是让你的代码可以循环的执行。

  • 实际需求For01.java

    编写个程序可以打印10句"你好,世界!"。请大家想想怎么做?

    package chapter05;
    public class For01 
        public static void main(String[] args) 
            //使用for循环控制
            for(int i = 1; i <= 10; i++) 
            System.out.println("你好,世界!" + i);
            
        
    
    
  • 基本语法

    for(循环变量初始化;循环条件;循环变量迭代)
        循环操作(可以多条语句);
    
    
  • 语法说明

    1.for关键字,表示循环控制

    2.for有四要素:(1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代
    3.循

    自学it18大数据笔记-第一阶段Java-day05-day06-day07-day08

    笔记为自学时随手记录,如有错误,欢迎指正,不胜感激!

     

    笔记分享:自学it18大数据笔记-第一阶段Java-day05-day06-day07-day08——会持续更新……

    第一阶段Java-day03-day04见:http://t.cn/R65SR0f

    day05笔记见下图:

     

     

    day06笔记见下图:

     

    day07笔记见下图:

     

    day08笔记见下图:

    以上是关于day 04-控制结构学习的主要内容,如果未能解决你的问题,请参考以下文章

    202105小白训练营-day04 流程控制

    php学习day04

    java基础语法学习day04---初学者必看详解

    Java day-04

    java基础语法学习day04(补充)---初学者必看详解

    java基础语法学习day04(补充)---初学者必看详解