java 控制结构

控制结构

程序流程控制介绍

​ 在程序中,程序控制的流程控制决定程序如何执行,主要是三大流程控制语句

  • 顺序控制
  • 分支控制 if-else
  • 循环控制

顺序控制

  • 介绍

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

  • 顺序控制举例和注意事项

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

public class Test {

    public static void main(String[] args) {
        
        int num1 = 12;
        int num2 = num1 + 2;
    }
}

//错误的形式
public class Test {

    public static void main(String[] args) {
        
        int num2 = num1 + 2;//错误
        int num1 = 12;
    }
}

分支控制if-else

  • 介绍

    让程序有选择的执行 分支控制有三种

    • 单分支 if
    • 双分支 if-else
    • 多分支 if-else if -else
  • 单分支

    • 基本语法

      if(条件表达式){

      执行代码块;(可以多条语句)

      }

说明:当条件表达式为true时,就执行{}的代码。如果为false,就不执行。特别

说明,如果{}中只有一条语句。则可以不用{},建议写上{}

​ 案例

import  java.util.Scanner;
public class If01 {

    public static void main(String[] args) {
        //演示单分支的使用 if的快速入门
        //编写一个程序 可以输入人的年龄 如果大于18
        //输出 你的年龄大于18,要对自己的行为负责,送入监狱

        //思路
        //创建一个Scanner对象
        //定义 int age
        //使用 if 判断

        //定义一个Scanner对象

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入人的年龄");
        //定义变量 age
        int age  =scanner.nextInt();

        if (age > 18) {
            System.out.println("你的年龄大于18,要对自己的行为负责,送入监狱");
        }

        System.out.println("程序继续......");
    }
}
		**单分支执行流程**

在这里插入图片描述

  • 双分支

    • 基本语法

    if(条件表达式){

    ​ 代码块1

    }esle{

    ​ 代码块2

    }

说明:当条件表达式成立 即执行代码块1,否则执行代码块2 如果执行代码块只有一条语句 则{} 可以省略,否则 不能省略

案例:

import  java.util.Scanner;
public class If02 {

    public static void main(String[] args) {

        //演示双分支的使用 if的快速入门
        //编写一个程序 可以输入人的年龄 如果大于18
        //输出 你的年龄大于18,要对自己的行为负责,送入监狱 否则输出 你的年龄不大,放过你

        //思路
        //创建一个Scanner对象
        //定义 int age
        //使用 if 判断

        //定义一个Scanner对象
        Scanner scanner = new Scanner(System.in);

        System.out.println("输入你的年龄");
        int age = scanner.nextInt();

        if (age > 18){
            System.out.println("你的年龄大于18,要对自己的行为负责,送入监狱");
        } else { //双分支
            System.out.println("你的年龄不大,放过你");
        }
    }
}

双分支流程图

在这里插入图片描述

  • 单分支 和 双分支的练习题
public class IfExercise {

    public static void main(String[] args) {

        //IF的练习题
        int x = 7;
        int y = 4;
        if (x > 5){
            if (y > 5){
                System.out.println( x +y);
            }
            System.out.println("韩顺平教育~");
        }else  {
            System.out.println("x id" + x );
        }

        // 输出 韩顺平教育~


        //编写程序,声明两个double型变量并赋值
        //判断第一个数大于10.0 且第二个数小于20.0 打印两个数之和
        double num1 = 15.5;
        double num2 = 18.48;

        if (num1 > 10.0 && num2 < 20.0 ){
            System.out.println("两数之和"+(num1 + num2));
        }


        //定义两个变量int 判断二者之和 是否能被3整除又能被5整除 打印提示信息
        //思路分析
        //1.定义两个变量
        //2 求和
        //3 sum % 3 ,5 后 等于 0
        //4 if esle
        int num3 = 8;
        int num4 = 7;
        int sum = num3 + num4;

        if (sum % 3 == 0 && sum % 5 ==0 ){
            System.out.println("和可以被3又可以被5整除");
        }else {

            System.out.println("和可以被整除");
        }

        if (sum % 3 == 0 ){
            if (sum % 5 == 0){
                System.out.println(sum + "能被3整除又能被5整除");
            }else {
                System.out.println(sum + "能被3整除不能被5整除");
            }
        }else {
            System.out.println(sum + "不能被3整除");
        }


        //判断一个年份是否为闰年 闰年的条件符合两者之一 :
        //1 年份能被4整除 但不能被100整除;
        //2 能被400整除

        //思路分析
        //1 定义 int year 保存年
        //2  年份能被4整除 但不能被100 整除 , => year % 4 ==0 && year % != 0

        // 3 能被400整除  = > year % 100 ==0
        //代码实现

        int year = 2023;

        if ((year % 4 == 0 && year % 100 !=0) || year % 400 ==0){

            System.out.println(year + "是闰年");
        }else {
            System.out.println(year + "不是闰年");
        }
    }
  • 多分支

    • 基本语法

    if(条件表达式1){

    ​ 执行代码块1;

    }

    else(条件表达式2){

    ​ 执行代码块2;

    }

    else{

    ​ 执行代码块n;

    }

    多分支流程图
    在这里插入图片描述

说明:

1.当条件表达式1成立时,即执行代码块1,

2.如果条件表达式1不成立,才去判断条件表达式2是否成立

3.如果条件表达式2成立,执行代码块2;

4.以此类推,如果所有的表达式都不成立

5.则执行else的代码块,注意,只能有一个执行入口

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

import  java.util.Scanner;

public class If03 {

    public static void main(String[] args) {

        /*
        输入报国同志的信用分
        如果
        信用分为100 极好
        (80-90] 优秀
        [60-80] 一般
        否则 不及格
        请从键盘输入报国的信用分,并加以判断
        假定信用分为int类型
         */

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入报国同志的芝麻信用分:");
        //请思考,如果输入的不是整数,而是hello..
        //==》 这里我们会使用异常处理机制搞定
        int score = myScanner.nextInt();

        //先对输入的数据,进行一个范围的有效判断 1- 100 ,否则提示错误
        if (score >= 1 && score <= 100){
        if (score == 100){
            System.out.println("极好");
        }else if (score > 80 && score <= 99){ //信用分为(80,90]
            System.out.println("优秀");
        }else if (score >= 60 && score <= 80){
            System.out.println("一般");
        }else  {
            System.out.println("不合格");
        }}
        else {
            System.out.println("你的输入有误,请重新输入");
        }


        boolean b = true;
        if (b == false){
            System.out.println("a");
        }else if (b){
            System.out.println("b");
        }else if (!b){
            System.out.println("c");
        }else {
            System.out.println("d");
        }

        //输出 b

        boolean a = true;
        if (a = false){
            System.out.println("a");
        }else if (a){
            System.out.println("b");
        }else if (!a){
            System.out.println("c");
        }else {
            System.out.println("d");
        }

        //输出 c
    }
}

  • 嵌套分支

    在一个分支架构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构成为内分支,外面的分支结构称为外分支,规范:不要超过3层 (可读性不好)

    • 基本语法

      if(){

      ​ if(){

      ​ //if-else

      ​ }else{

      ​ //if-else

      ​ }

      }

import java.util.Scanner;

public class NestedIf {

    public static void main(String[] args) {

        //思路分析
        //1. 创建Scanner对象
        //2. 接收成绩
        //3. if-else 大于8.0 进入决赛
        //4. 接收性别 ,使用if-else 判断 进入男子组还是女子组
        //创建Scanner对象
        Scanner myScanner = new Scanner(System.in);
        System.out.println("输入成绩");
        double score = myScanner.nextDouble();
        if (score > 8.0) {
            System.out.println("输入性别");
            char gender = myScanner.next().charAt(0);
            if (gender == '男') {
                System.out.println("进入男子组");
            }else if (gender == '女'){
                System.out.println("进入女子组");
            }else {
                System.out.println("你的性别输入有误,重新输入");
            }
        }else {
            System.out.println("sorry,你被淘汰了~");
        }
    }
}

练习

import  java.util.Scanner;
public class NestedIf02 {

    public static void main(String[] args) {

        //出票系统 根据淡旺季的月份和年龄,打印票价
        // 4-10月 是旺季
        // 成人 18-60 60 儿童 <18 半价 老人 > 60 1/3

        //淡季
        // 成人: 40
        //其他:20

        //思路分析
        //创建一个Scanner对象
        //输入 月份 使用 if-else 判断 双分支
        //输入 年龄 使用if-else if -else 判断 多分支
        //代码实现
       Scanner myScanner = new Scanner(System.in);

       System.out.println("请输入月份");
       int month = myScanner.nextInt();

       if (month >= 4 && month <= 10){
           System.out.println("请输入年龄");
           int age  = myScanner.nextInt();

           if (age >= 18 && age <= 60) {
               System.out.println("票价60");
           }else if (age < 18){
               System.out.println("票价30");
           }else {
               System.out.println("票价20");
           }
       }else {
           System.out.println("请输入年龄");
           int age  = myScanner.nextInt();

           if (age >= 18 && age <= 60 ){
               System.out.println("票价40");
           }else {
               System.out.println("票价20");
           }
       }
    }
}

switch分支结构

  • 基本语法

    switch(表达式){

    ​ case 常量1:

    ​ 语句块1;

    ​ break;

    ​ case 常量1:

    ​ 语句块1;

    ​ break;

    ​ …

    ​ case 常量1:

    ​ 语句块1;

    ​ break;

    ​ default;

    ​ default语句块;

    ​ break;

    }

说明: 1. switch关键字 ,表示switch分支

		2. 表达式 对应一个值		3. case 常量 1:当表达式的值等于常量1 就执行 语句块1		4. break 表示退出switch		5. 如果和case常量1匹配 就执行语句块1,如果没有匹配,就继续匹配case 常量2		6. 如果一个都没有匹配上,就执行default

switch流程图

在这里插入图片描述

import com.sun.org.apache.xerces.internal.impl.xs.SchemaNamespaceSupport;import java.util.Scanner;public class Switch01 {    public static void main(String[] args) {        //请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d...        //a 表示星期一, b表示星期二 ...        // 根据用户输入显示相应的西悉尼,要求使用switch语句实现        //思路分析        //1.创建一个Scanner对象        //2.使用switch来完成匹配,并输出对应的信息        Scanner myScanner = new Scanner(System.in);        System.out.println("请输入一个a-g的字符");        char c1 = myScanner.next().charAt(0);        //在java中,只要有值返回,就是一个表达式        switch (c1){            case 'a':                System.out.println("星期一");                break;            case 'b':                System.out.println("星期二");                break;            case 'c':                System.out.println("星期三");                break;            case 'd':                System.out.println("星期四");                break;            case 'e':                System.out.println("星期五");                break;            case 'f':                System.out.println("星期六");                break;            case 'g':                System.out.println("星期天");                break;            default:                System.out.println("不存在,匹配不上");        }        System.out.println("退出switch,继续执行程序");    }}
  • Switch的细节讨论

    • 表达式数据类型,应和case后的常量一致,或者可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
    • switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum(枚举),String)
    double c =1.1;switch (c){ //错误    case 1.1:        System.out.println("ok3");        break;}
    
    • case字句中的值必须是常量或常量表达式,而不是变量
    • default字句是可选的,当没有匹配的case时,执行defualt
    • break语句用来在执行一个case分支后使程序跳出switch语句块,如果没有写break,程序会顺序执行到底 除非遇到了break
        char  c = 'a';        switch (c){            case 'a':                System.out.println("ok");//                break;            case 'b':                System.out.println("ok2");//                break;            default:                System.out.println("ok3");        }
public class SwitchDetail {    public static void main(String[] args) {        //演示switch的注意细节        // 表达式数据类型,应和case后的常量一致,        // 或者可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int        // char -> int -> long ->float -> double        char  c = 'a';         switch (c){            case 'a':                System.out.println("ok");                break;            case 'b':                System.out.println("ok2");                break;            default:                System.out.println("ok3");        }        //case字句中的值必须是常量或常量表达式,而不是变量        //break语句用来在执行一个case分支后使程序跳出switch语句块,        // 如果没有写break,程序会顺序执行到底    }}

练习

import com.sun.corba.se.spi.ior.IdentifiableFactory;import java.util.Scanner;public class SwitchExercise {    public static void main(String[] args) {        //使用switch把小写类型的char型转为大写(键盘输入,只转换a,b,c,d,e        //其他的输出”other“        //创建Scanner对象        Scanner myScanner = new Scanner(System.in);        System.out.println("请输入a-e");        char c1 = myScanner.next().charAt(0);        switch (c1){            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");        }        //对学生成绩大于60分的,输出合格 低于60分的输出不合格        //提示        //思路分析        // 需要进行转换 取整 强转 (int)(成绩/60)        double score1 = 88.5;        if (score1 >=1 && score1 <= 100){        switch ((int)(score1/60)){            case 0:                System.out.println("不及格");                break;            case 1:                System.out.println("及格");                break;        }}        else {            System.out.println("输入的成绩在0-100");        }        int score = myScanner.nextInt();        if (score>=1 && score <= 100){            if (score > 60){                System.out.println("合格");        }else {                System.out.println("不合格");            }        }else {            System.out.println("输入有误");        }        //根据指定的月份,打印该月份的季节。3、4、5 春节 6、7、8 夏季        // 9、10、11 秋季 1、2、12 冬季 使用穿透        //思路分析        //创建Scanner对象        //接收用户输入月份 int month        //使用switch来匹配  使用穿透来比较简洁        System.out.println("输入月份");        int month = myScanner.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 1:            case 2:            case 12:                System.out.println("冬季");                break;            default:                System.out.println("你输入的月份不对1-12");        }    }}

Switch和if的比较

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

for循环

​ 让你的代码可以循环的执行

  • 基本语法

    for(循环变量初始化;循环条件;循环变量迭代){

    ​ 循环操作(可以多条语句)

    }

老韩说明:

1. for关键字,表示循环控制2. for 有四要素  (1)循环变量初始化 (2) 循环条件 (3)循环操作 (4) 循环变量迭代3. 循环操作 这里可以有多条语句,也就是我们要循环执行的代码4. 如果 循环操作语句只有一条语句 可以省略{},建议不要省略
public class For01 {    public static void main(String[] args) {        //打印十句 你好,韩顺平教育        for (int i = 1;i <= 10;i++){            System.out.println("你好,韩顺平教育" + i);        }    }}
  • for循环执行流程

在这里插入图片描述

  • for循环的注意事项和细节
    • 循环条件时返回一个Boolean的表达式
    • for(;循环条件;)中的初始化和变量迭代可以写在外面,但是两边的分号不能省略
    • 循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
    • 使用内存分析法,分析以下输出
        int count = 3;        for (int k = 0,j=0; k < count;k++,j += 2){            System.out.println("k=" + k + "j=" + j);            //k=0 <3            // k = 0 j=0  // 0 0            // k = 1 j = 2            // k =1 <3            //k = 1 j = 2    // 1 2            //k = 2 j =4            //k = 2 < 3            //k =2 j = 4 // 2 4            // k =3 j = 6            //k =3 !< 3        }
  • for循环的编程思想
    • 化繁为简
    • 先死后活
public class ForExercise {    public static void main(String[] args) {        //打印1-100之间所有9的倍数的整数,统计个数 及总和        //老韩的两个编程思想(技巧)        //1. 化繁为简 将复杂的需求,拆解成简单的需求,逐步完成        //2.先死后活 :先考虑固定的值,然后转成可以灵活变化的值        //思路分析        //化繁为简        //完成输出 1-100的值        //在输出的过程中,进行过滤,只输出9的倍数        //统计个数 定义一个变量 int count =0 当条件满足时 count++        //总和 定义一个变量 int sum = 0 当条件满足时, sum += i        int count = 0;        int sum =0;        for (int i = 1;i <= 100;i++){            if (i % 9 ==0) {                count++;                sum += i;                System.out.println("i-"+i);            }        }        System.out.println("count="+count);        System.out.println("sum=" + sum);    }}

While循环控制

  • 基本语法

    循环变量初始化;

    while(循环条件){

    ​ 循环体;

    ​ 循环变量迭代;

    }

  • 说明

    • while循环也有四要素
    • 只是四要素放的位置,不一样
  • while循环执行流程分析

在这里插入图片描述

public class While01 {    public static void main(String[] args) {        //演示while循环的使用        int  i = 1;//循环变量初始化        while (i <= 10){//循环条件            System.out.println("你好,韩顺平教育"+ i);            i++;//循环变量迭代        }        System.out.println("退出while循环,继续执行");    }}
  • 注意事项和细节
    • 循环条件是返回一个布尔类型的表达式
    • while循环先判断在执行
public class WhileExercise {    public static void main(String[] args) {        //打印1-100之间所有能被3整除的数        //化繁为简,先死后活        int i = 1;        while (i <= 100){            if (i % 3 == 0){                System.out.println("i=" + i);            }            i++;//变量自增        }        System.out.println("====================");        //打印40-200之间所有的偶数        //化繁为简,先死后活        int x = 40;        while (x <= 200){            if (x % 2 ==0){                System.out.println("x=" + x);            }            x++;        }    }}

Do…While循环控制

  • 基本语法

    循环变量初始化

    do {

    ​ 循环体;

    ​ 循环变量迭代;

    }while(循环条件)

  • 说明

    • do while 是关键字
    • 也有循环四要素,只是位置不一样
    • 先执行,在判断,也就是说,一定会至少执行一次
    • 最后 有一个分号 ;
    • while和do…while区别举例:要账
  • do…while循环执行流程
    在这里插入图片描述

public class DoWhile {    public static void main(String[] args) {        //演示dowhile的使用        //输出十句韩顺平教育        int i= 1;//循环变量初始化        do {            //循环体            System.out.println("你好,韩顺平教育" + i);            i++;//循环变量迭代        }while (i <=10);//循环条件        System.out.println("退出do..while ,继续..");    }}
  • 注意事项和细节说明
    • 循环条件是返回一个布尔值的表达式
    • do…while循环是先执行,再判断,一次至少执行一次
public class DoWhileExercise {    public static void main(String[] args) {        //打印1-100        int i = 1;        do {            System.out.println("i="+i);            i++;        }while (i <= 100);        //计算1-100的和        int x = 1;        int sum = 0;        do {            sum += x;            x++;        }while (x <= 100);        System.out.println("sum=" + sum);        //统计1-200之间能被5整除 但不能被3整除的个数        //化繁为简        //1、使用do while 输出 1- 200        //2、过滤 能被5整除 但不能被3整除 %        //3、统计满足条件的个数        //先死后活        //范围的值 可以做成变量        //能被5整除 但不能被3整除 5 和 3  也可改为变量        int y = 1;        int count = 0;        do {            if (y % 5 == 0 && y % 3 != 0){                System.out.println("y=" + y);                count++;            }            y++;        }while (y <= 200);        System.out.println("count=" + count);        //    }}
import java.util.Scanner;public class DoWhileExercise02 {    public static void main(String[] args) {        //如果李三不还钱,则老韩将一直使出五连鞭 直到还钱        //化繁为简        //不停的问还钱吗        // 使用char answer 接收 定义一个Scanner对象        // 在do-while 的while中 判断 如果是 y 就不再循环        Scanner scanner = new Scanner(System.in);        char answer = ' ';        do {            System.out.println("老韩使出5连鞭");            System.out.println("老韩问:还钱吗?y/n");            answer = scanner.next().charAt(0);            System.out.println("它的回答是" + answer);        }while (answer != 'y');        System.out.println("李三还欠钱了");    }}

多重循环控制(重点,难点)

  • 介绍
    • 将一个循环放在另一个循环体内,就形成了嵌套循环,其中,for,while,do while 均可以作为外层循环和内层循环。【建议一般使用两层,最多不超过三层,否则,代码的可读性很差】
    • 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次的循环,开始下一次的循环
    • 设外层循环次数为m次,内层为n次,则内层循环实际上需要执行m*n次
  • 多重循环执行步骤分析

//i j

// 0 0 1 2

// 1 0 1 2

在这里插入图片描述

public class MulFor {    public static void main(String[] args) {        for (int i = 0; i < 2;i++){            for (int j =0; j < 3;j++){                System.out.println("i="+i+"j=" +j);            }        }    }}

练习

import java.util.Scanner;public class MulForExercise01 {    public static void main(String[] args) {        //统计3个班的成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分        //【学生成绩从键盘输入】        //化繁为简        //1.先计算一个班的 5个学生的成绩 使用for        //        //2.创建一个Scanner对象 接收数据        //3.得到该班级的平均分 定义一个sum 把该班级5个学生的成绩累积        //4.嵌套循环再输出3个班级的成绩 平均分        //5.所有班级的平均分        //6.统计三个班级的及格人数        //定义一个变量 int count        //可以优化 【可读性,结构】        //先死后活        //        int x = 3; //班级个数        int y = 5; /        double sum02 =0;//三个班级的总分        double avg02 =0;        int count = 0;        Scanner myScanner = new Scanner(System.in);        for(int i = 1;i <= x;i++){            double sum01 = 0;            double avg01 = 0;            for (int j =1;j <= y;j++){                System.out.println("请输入第"+i+"班第"+j+"学生的成绩");                double score = myScanner.nextDouble();                //统计3个班级的及格人数                if (score >= 60){                    count ++;                }                sum01 += score;//累积一个班级的总分            }            //因为sum是5个学生的总成绩            avg01 = sum01 / y;            System.out.println("第"+i+"班的平均成绩"+avg01);            sum02 += sum01;        }        avg02 = sum02 / (x*y);        System.out.println("所有班级的平均成绩"+avg02);        //统计3个班级的及格人数        System.out.println("count="+count);    }}

九九乘法表


空心金子塔

public class Stars {    public static void main(String[] args) {        //可以接收一个整数,表示层数(totalLevel),打印金字塔        //创建一个Scanner对象        /*                *              *   *             *     *            *********         */        //化繁为简        //1.先打印一个矩形        /*        ******        ******        ******        ******        ******         */        //2.打印半个金字塔//        *        **        ***        ****        *****        //打印整个金子塔        /*          *         ***        *****       *******      *********         */        //打印空心金字塔[最难想到的]        /*            *           * *          *   *         *     *        *********         */        //先死后活        int totalLevel = 10;        for (int i = 1; i <= totalLevel;i++){// i表示层数            //在输出*之前还要输出空格 对应的空格 = 总层数-当前层            for (int x =1;x <= totalLevel-i;x++){                System.out.print(" ");            }            for (int j =1 ;j <= 2*i-1;j++){//控制打印每层的*个数                if(j == 1 || j == 2*i-1 || i == totalLevel){                    System.out.print("*");                }else {                    System.out.print(" ");                }            }            //没打印完一层的*后,就换行 println本身就会换行            System.out.println("");        }    }}

空心菱形

public class Stars02 {    public static void main(String[] args) {        //打印一个空心的菱形        /*        //1.打印一个矩形        ******        ******        ******        ******        ******        2. 打印半边菱形         *   1         **  2         *** 3         **  4         *   5         3.打印半个菱形            *           ***          *****         *******        *********         *******          *****           ***            *         */        //打印上半部分        for (int i = 1;i <=5;i++){            for (int k =1 ;k<=5-i;k++) {                System.out.print(" ");            }            for (int j=1;j<=2*i-1;j++){            System.out.print("*");            }            System.out.println("");        }		//打印下半部分        for (int i = 4 ; i >=1;i--){            for(int k=1 ;k<=5-i;k++){                System.out.print(" ");            }            for (int j =1;j<=2*i-1;j++){                System.out.print("*");            }            System.out.println("");        }        System.out.println("=================");        for (int i = 1;i <=5;i++) {            for (int k = 1; k <= 5 - i; k++) {                System.out.print(" ");            }            for (int j = 1; j <= 2 * i - 1; j++) {                if (j == 1 || j == 2 * i - 1) {                    System.out.print("*");                } else {                    System.out.print(" ");                }            }            System.out.println("");        }        for (int i = 4 ; i >=1;i--){            for(int k=1 ;k<=5-i;k++){                System.out.print(" ");            }            for (int j =1;j<=2*i-1;j++){                if (j ==1 || j== 2*i-1){                    System.out.print("*");                }else {                    System.out.print(" ");                }            }            System.out.println("");        }    }}

跳转控制语句-break

  • 需求

    随机生成1-100的一个数,直到生成了97这个数,看看你一共用了几次

    提示使用(int)(Math.random() * 100)+1

    public class Random {    public static void main(String[] args) {        int count = 1;        while (true){            //随机生成1-100的数            int random = (int)((Math.random()*100)+1);            System.out.println("random=" +random);            count++;            //判断是否为97            if (random == 97){                break;            }        }        System.out.println(count);    }}
    
  • 基本介绍

    • break语句用来终止某个语句块的执行,一般用在循环控制语句和switch语句中
  • 基本语法

    {

    ​ …

    ​ break;

    ​ …

    }

  • 执行流程图

在这里插入图片描述

public class Break01 {    public static void main(String[] args) {        for (int i = 0; i < 10 ; i++) {            if (i == 3){                break;            }            System.out.println("i="+ i);        }    }}
  • break语句的注意事项和细节
    • break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
    • 标签的基本使用

在这里插入图片描述

  1. break语句可以指定退出哪层
  2. label1是标签,由程序员指定
  3. break后指定哪个labl就退出哪里
  4. 在实际开发中,尽量不使用标签
  5. 如果没有指定break,默认退出最近的循环体
public class BreakDetail {    public static void main(String[] args) {        lable1:        for (int j = 0;j < 4;j++){//外层for            lable2:            for (int i = 0; i < 10 ; i++) {//内层for                if (i == 2){                    break lable1;//                    break;//等价于 break label2                }                System.out.println("i=" + i);            }        }    }}

练习

public class BreakExercise {    public static void main(String[] args) {        //求1-100以内的和,当和大于20时输出当前数        //思路分析        // 循环 1-100 求和sum        //当 sum > 20 记录当前数        int sum =0;        int i = 1;        //注意i的作用范围只在for循环里面        for (; i <=100 ; ) {            sum += i;            if (sum > 20){                System.out.println("i=" + i);                break;            }            i++;        }        System.out.println("i=" + i);    }}

在这里插入图片描述

练习二

import  java.util.Scanner;public class BreakDetail02 {    public static void main(String[] args) {        //实现登录验证,有三次机会,如果用户名为"丁真",密码”666“,提示登录成功        // 否则提示还有几次机会,请使用for+break完成        //思路分析        //1、创建Scanner 对象 接收用户输入        //2、定义两个String变量        //3、最多循环3次 如果满足条件就提前退出        Scanner myScanner = new Scanner(System.in);        int count = 3;        String username = "";        String password = "";        for (int i = 1;i <=3;i++){            System.out.println("输入用户名");            username= myScanner.next();            System.out.println("输入密码");            password= myScanner.next();            //比较输入的用户名和密码是否正确            //补充说明 字符串 内容是否相等  使用 equals 来比较            if (username.equals("丁真") && password.equals("666")){                System.out.println("登录成功");                break;            }            //减少登录次数            count--;            System.out.println("还有"+count+"次机会");        }    }}

跳转控制语句-Continue

  • 基本介绍

    • continue语句用于结束本次循环,继续执行下一次循环
    • continue语句出现在多层嵌套循环语句中时,可以通过标签指定要跳过的是哪一层循环,这个和前面的标签色使用规则一样
  • 基本语法

    {

    ​ …

    ​ continue;

    ​ …

    }

  • 以while为例的执行流程分析
    在这里插入图片描述

  • 快速入门

    public class Continue01 {    public static void main(String[] args) {        //代码        int i = 1;        while (i <= 4){            i++;            if (i == 2){                continue;            }            System.out.println("i=" + i);        }    }}
    

在这里插入图片描述

  • 注意事项和细节
public class ContinueDetail {    public static void main(String[] args) {                lable1:        for (int j = 0; j < 4 ; j++) {            lable2:            for (int i = 0; i < 10 ; i++) {                if (i == 2) {                    //看看输出什么值,并分析                    //continue ; //等价于 continue label2                    continue lable2;//循环四次 输出0-1 3-9//                    continue lable1;//循环4次 输出4次0-1                }                System.out.println("i=" + i);            }        }    }}

跳转控制语句-return

  • 介绍
    • return使用在方法,表示退出所在的方法,在讲解方法的时候,会详细的介绍;注意return写在main方法,退出程序
public class Return01 {    public static void main(String[] args) {        for (int i = 1; i <=5 ; i++) {            if (i==3){                System.out.println("韩顺平教育"+i);//                break;//                continue;                return;//当return用在方法时,表示跳出方法,如果用在mian,表示退出程序            }            System.out.println("Hello World");        }        System.out.println("go on ..");    }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值