Java基础04-控制结构

前言

本文是跟着韩B站顺平老师的java课做的学习笔记,方便复习,整理出来与大家一起学习,不足之处欢迎大家在评论区留言


文章目录

  • 前言
  • 块作用域
  • 顺序结构
  • 分支结构
    • if-else
    • 多重选择switch
    • if-else与switch使用比较
  • 循环结构
    • for循环
    • while循环
    • do...while循环
    • 多重循环
  • break和continue

块作用域

用大括号括起来的若干条简单的java语句。块(block)确定了变量的作用域。

  • 注意
  1. 一个块可以嵌套在另一个块中。
  2. 不能在嵌套的两个块中声明同名的变量。

顺序结构

程序从上往下逐行执行,中间没有任何判断与跳转。
Java基础04-控制结构_第1张图片

分支结构

if-else

说明:执行语句只有一条可以省略大括号,但最好不要这么做。else子句与最邻近的if构成一组。

Java基础04-控制结构_第2张图片

  • 小栗子
import java.util.Scanner;

public class xiaoye{
    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);
        System.out.println("请输入你的年纪:");
        int age = scan.nextInt();
        if (age >= 18){
            System.out.println("你已经满18岁了,可以坐牢了");
        }
        else if (18 - age < 2) {
            System.out.println("马上就轮到你了,莫慌");
        }
        else {
            System.out.println("你还早,再等几年");
        }
        scan.close();
    }
}

说明:

  • 多分支可以没有 else ,如果所有条件表达式都不成立,没有执行入口。
  • 如果有 else ,如果所有条件表达式都不成立,默认执行 else 块。
  • 嵌套分支不建议超过3层,否则可读性不高。
import java.util.Scanner;

public class xiaoye{
    public static void main(String[] args){
        /*
        1.判断分数,8.0以上入围
        2.分男女赛道
        */
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您的分数:");
        double score = input.nextDouble();
        if (score >= 8.0){
            Scanner input2 = new Scanner(System.in);
            System.out.println("请输入性别(男/女):");
            char gender = input2.next().charAt(0);
            if (gender == '男') {
                System.out.println("请您进入男子组继续比赛。");
            }
            else if (gender == '女'){
                System.out.println("请您进入女子组继续比赛。");
            } else {
                System.out.println("呀嘿,暂无对应赛道,下次一定。");
            }
        } else {
            System.out.println("抱歉,无法入围。");
        }
    }
}

Java基础04-控制结构_第3张图片

多重选择switch

Java基础04-控制结构_第4张图片

  • 基本语法
switch(表达式){
	case 常量1:	//当...
	语句块1;
	break;
	...
	case 常量n:
	语句块n;
	break;
	...
	default:
	default语句块;
	break;
}
  • 说明
  1. 表达式对应一个值。
  2. case 常量1: 当表达式的值等于常量1,就执行语句块1。
  3. break: 跳出 switch 语句块。
  4. 如果一个 case 都没匹配上,就执行default。
  • 小细节
  1. 表达式数据类型要与 case 中常量保持一致。或者是可以自动转换成可以比较的类型。
  2. switch(表达式) 中表达式的返回值必须是:byte、short、int、char、enum[枚举]、String
  3. case 常量/常量表达式:
  4. 不写 default 也是可以的。当没有 case 匹配的时候,啥也不输出。
  5. break: 跳出 switch 语句块,如果没有 break 语句,会发生穿透。
  • 注意

如果 case 后面没有 break ,那么就会一直执行后面 case 里面的语句块–穿透,这常常会发生错误。如果感觉把握不住,if-else也是不错的。 如果非要用 switch 语句, 编译代码时可以考虑加上-Xlint:fallthrough选项

import java.util.Scanner;

public class xiaoye {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("请输入1/2/3:");
        int score = input.nextInt();

        switch (score) {
            case 1:
                System.out.println("今天星期一,小猴穿新衣");
                // break;
            case 2:
                System.out.println("今天星期二,小猴当小二");
                break;
            case 3:
                System.out.println("今天星期三,小猴来巡山");
                break;
            default:
                System.out.println("输入123以外的数字,小猴不出现喔");
                break;
        }
    }
}

Java基础04-控制结构_第5张图片

if-else与switch使用比较

  • 如果判断的具体数值不多,而且符合byte、short、int、char、enum[枚举]、String这6种类型,两种分支语句都可以用,但是建议 switch。
  • 对于区间判断,对结果为 boolean 型判断,使用 if-else 更轻松。

循环结构

Java基础04-控制结构_第6张图片

for循环

  • 基本语法
for (循环变量初始化 ; 循环条件 ; 循环变量迭代){
	循环体(可以多条语句);
}

执行顺序:变量初始化->循环条件->循环体->变量迭代

  • 小tips
  1. 循环条件返回的是布尔值的表达式。
  2. 循环变量初始化可以写到外面,循环变量迭代可以写到循环体里面:初始化 ; for(; 循环条件 { 循环变量迭代; },这种写法就是for循环运行逻辑。
  3. 循环初始值可以有多条初始化语句,但要求类型一致,中间用逗号隔开;循环变量迭代也可以有多条。
for(int i=0,j=0;i<3;i++,j+=2){
    System.out.println("i="+i+'\t'+"j="+j);
}
  1. for( ; ; ) 死循环。

while循环

  • 基本语法
while(循环条件){
	循环体;
	循环变量迭代;
}

do…while循环

  • 基本语法
do{
	循环体;
	循环变量迭代;
} while (循环条件);
  • 说明
  1. 先执行,再判断。循环体至少执行一次

Java基础04-控制结构_第7张图片

多重循环

循环中有循环,前面的for、while、do…while可以作为彼此的外(内)层循环。一般循环不要超过三层。

  • 栗子01-打印金字塔
/*
    *
   * *
  *****
*/
/* 
1.先来半个塔,刚好层数与每层个数相同
        for(int i=1;i<=4;i++){  //层数
            for(int j=1;j<=i;j++){     //每层个数
                   System.out.print("*");
            }
            System.out.print('\n');
2.那一整个塔的层数 i 与每层个数 j 的关系:j=2*i-1
*
***
*****
*******
3.把2中的塔扶正,打印空格,那么每层空格数是最后一层中心点的前面*号的个数:总层数-当前层数
            //在打印*之前先打空格
            for(int k=1;k<=level-i;k++){
                System.out.print(" ");
            }
4.空心的金字塔:每层就两个,开头和末尾,其余打空格
*/
import java.util.Scanner;

public class xiaoye {
    public static void main(String[] args) {
        // 打印金字塔
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入金字塔层数:");
        int level = myScanner.nextInt();
        for(int i=1;i<=level;i++){  //层数
            for(int k=1;k<=level-i;k++){	//总层数-当前层数
                System.out.print(" ");
            }
            for(int j=1;j<=(2*i-1);j++){     //每层个数
                if(j==1 || j==(2*i-1) || i==level){
                    System.out.print("*");
                }else {
                    System.out.print(" ");
                }
            }
            System.out.print('\n');
        }
    }
}

Java基础04-控制结构_第8张图片

  • 栗子02-打印菱形
import java.util.Scanner;

public class xiaoye {
    public static void main(String[] args) {
        // 打印菱形
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入菱形层数(奇数层):");
        int level = myScanner.nextInt();
        int num = ((level+1)/2);
        for(int i=1;i<=num;i++){  //层数
            for(int k=1;k<=num-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.print('\n');
        }
        for(int i=level-num;i>=1;i--){  //剩余层数
            for(int k=1;k<=num-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.print('\n');
        }
    }
}

Java基础04-控制结构_第9张图片

break和continue

  • break :外跳。只能跳出语句块,不能跳入语句块
    • 带标签的 break :希望直接跳出多重嵌套的循环语句,标签必须放在希望跳出的循环最外层之前,还要给他加上冒号。这个标签实际上还可以用到 if 语句中。
  • continue:内跳。将语句控制移到最内层循环首部,或跳到 for 循环的变量迭代更新处。

冲冲冲!!!‍‍‍
Java基础04-控制结构_第10张图片

你可能感兴趣的:(Java,java,开发语言)