java流程控制2之各类结构

一、顺序结构

  • 定义:顺序结构就是按照顺序一句一句执行。

例:

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

        System.out.println("hello world1!");
        System.out.println("hello world2!");
        System.out.println("hello world3!");
        System.out.println("hello world4!");
        System.out.println("hello world5!");
    }
}

输出结果为:

hello world1!
hello world2!
hello world3!
hello world4!
hello world5!

二、if结构

1、if单选择结构语法

if(布尔表达式){
   如果布尔表达式为true将执行的语句
}

例:

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容:");

        String s = scanner.nextLine();

        //equals:判断字符串是否相等,这个地方不能用==
        if(s.equals("Hello")){
            System.out.println(s);
        }

        System.out.println("End");
        scanner.close();
    }
}

2、if双选择结构语法

if(布尔表达式){
   //输出布尔表达式为true将执行的语句
}else{
   //输出布尔表达式为false将执行的语句
}

例:

import java.util.Scanner;

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

        //考试分数大于60分就是及格,小于60分就是不及格
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();
        if(score>=60){
            System.out.println("及格");
        }else{
            System.out.println("不及格");
        }
        scanner.close();

    }
}

3、if多选择结构语法

if(布尔表达式1){
    //如果布尔表达式1的值为true将执行的代码
}else if(布尔表达式2){
    //如果布尔表达式2的值为true将执行的代码
}else if(布尔表达式3){
    //如果布尔表达式3的值为true将执行的代码
}else{
    //如果以上布尔表达式都不为true将执行的代码
}

注意1:if 语句至多有一个else语句,语句在所有的else if 语句之后
if 语句可以有若干个else if 语句,它们必须在else语句之前
且其中一个else if 语句检测为true,其他的else if以及else语句都将跳过执行

例:成绩90以上为优秀,70以上为良好,60以上为中等,60以下为偏差

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        //成绩90以上为优秀,70以上为良好,60以上为中等,60以下为偏差
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if(score==100){
            System.out.println("恭喜满分");
        }else if(score>90 && score<100){
            System.out.println("优秀");
        }else if(score>70 && score<=90){
            System.out.println("良好");
        }else if(score>60 && score<=70) {
            System.out.println("中等");
        }else if(score>=0 && score<=60){
            System.out.println("偏差");
        }else{
            System.out.println("成绩不合法");
        }
        scanner.close();
    }
}


补充:嵌套的if结构语法:

if(布尔表达式1){
   //如果布尔表达式1的值为true将执行的代码
    if(布尔表达式2){
       //如果布尔表达式2为true将执行的代码
    }
}

三、Switch结构

1、Switch基础知识及语法

  • 基础知识
  1. switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
  2. Switch语句中的变量类型可以是:

​ ①byte、short、int或者char;

​ ②从java SE 7 开始,switch支持字符串String类型了;

​ ③同时case标签必须为字符串常量或者字面量

  • Switch case语句结构:

  •         switch(expression){
            case value:
            //语句
            break;//可选
            //语句
            break;//可选
            //你可以有任意数量的case语句
            default://可选
            //语句
            }
    

2、举例说明

public class SwitchDemo01 {
    
    public static void main(String[] args) {
        
        char grade = 'C';

        switch (grade){
            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;//可选
            default:
                System.out.println("未知等级");
        }
    }
}

注意:case穿透,没有break时,它会把下面所有的都输出。例如:输入B,输出结果为B、C、D、E的输出结果,所以,每一个case后面都加上一个break

3、反编译

  • JDK7以后的新特性,表达式结果可以是字符串!!!
  • 字符串的本质还是数字
  • 反编译 Java---class(字节码文件)----反编译(IDEA)
  • 实现方式:直接在文件夹里丢到java文件夹里
  • hashcode:每一个对象都有对应的hashcode,它是生成的

例:

public class SwitchDemo02 {

    public static void main(String[] args) {

        String name = "司空颜";

        switch (name){
            case "颜旭":
                System.out.println("颜旭");
                break;
            case "司空颜":
                System.out.println("司空颜");
                break;
            default:
                System.out.println("弄啥嘞");
        }
    }
}

反编译后的class文件如下:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.sikongyan.www.Struct;

public class SwitchDemo02 {
    public SwitchDemo02() {
    }

    public static void main(String[] args) {
        String name = "司空颜";
        byte var3 = -1;
        switch(name.hashCode()) {
        case 1237201:
            if (name.equals("颜旭")) {
                var3 = 0;
            }
            break;
        case 21668698:
            if (name.equals("司空颜")) {
                var3 = 1;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("颜旭");
            break;
        case 1:
            System.out.println("司空颜");
            break;
        default:
            System.out.println("弄啥嘞");
        }

    }
}

四、结束循环语句break与continue

1、break

  • break在任何循环语句的主体部分,均可用break控制循环的过程。
  • break用于强制退出循环,不执行循环中剩余的语句。
  • break语句也在switch语句中使用

举例:

public class BreakDemo01 {
    public static void main(String[] args) {
 
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);

            if (i==30){
                break;//强制退出i++的执行
            }
        }
        System.out.println("123");//依旧会被执行
    }
}

2、continue

  • continue语句用在循环语句体中,用于终止某次循环过程
  • 即:跳过循环体中尚未执行的语句,接着执行下一次是否执行循环的判定

举例:

public class ContinueDemo01 {
    public static void main(String[] args) {
        
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;//if里的布尔表达式为true时,会跳到while循环去继续执行
            }
            System.out.print(i);
        }

    }
}

五、循环结构

1、While循环

  • while基本语法
while(布尔表达式){
    //循环内容
    }

例1:输出1--100

public class WhileDemo01 {

    public static void main(String[] args) {

        int i = 0;
        while(i<100){
            i++;//i=i+1
            System.out.println(i);
        }
    }
}
  • while死循环(尽量避免写成死循环)
public class WhileDemo02 {

    public static void main(String[] args) {
       //死循环:正常业务中尽量避免
        while(true){
            //等待客户端连接
            //定时闹钟
            //....
        }
    }
}

例2:计算1+2+3+...+100=?

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

        int i = 0;
        int sum = 0;

        while(i<=100){
            sum = sum + i;
            i++;
            //System.out.println(sum);//输出每一次累加的结果
        }

        System.out.println(sum);//输出最终结果

    }

}

2、Do While循环

  • Do While基本语法
  do{
    //代码语句
    }while(布尔表达式);
  • Do While和While的区别
  • 1、while先判断后执行,do...while是先执行后判断!
  • 2、do...while总是保证循环体会被至少执行一次,这是它们之间的主要差别。
public class DoWhileDemo02 {
    public static void main(String[] args) {

        int a = 0;
        while(a<0){
            System.out.println(a);
            a++;
        }//不执行while判断的语句,无输出结果
        System.out.println("==================");
        do{
            System.out.println(a);
            a++;
        }while(a<0);
    }//会执行do...while判断的语句,输出结果为0
}

例:

public class DoWhileDemo01 {

    public static void main(String[] args) {

        //计算1+2+3+...+100=?

        int i = 0;
        int sum = 0;

        do{
            sum = sum + i;
            i++;
            //System.out.println(sum);//输出每一次累加的结果
        }while(i<=100);

        System.out.println(sum);//输出最终结果
    }
}

3、For循环

  • For循环基本语法
 for(初始化;布尔表达式;更新){
    //代码语句
    }
  • For循环需要注意的点:

    1、最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空的。
    2、然后,检测布尔表达式的值,如果为ture,循环体被执行,如果为false,循环终止,开始执行循环体后面的语句。
    3、执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
    4、再次检测布尔表达式,循环执行上面的过程
    5、初始化值可以为空,条件判断可以为空,迭代可以为空。则形成死循环。如下表达

for( ; ; ){

        }

​ 6、for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构

​ 7、快捷键:100.for会自动生成一个for循环语句

例1:

public class ForDemo01 {
 
    public static void main(String[] args) {
        int a = 1;//初始化条件

        while(a<=100){//条件判断
            System.out.println(a);//循环体
            a+=2;//迭代
            }
        System.out.println("while循环结束!");

        //初始化值//条件判断//迭代
        for(int i=1;i<=100;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束!");

例2:计算0--100之间的奇数和偶数的和

public class ForDemo02 {
    public static void main(String[] args) {
        //练习1:计算0--100之间的奇数和偶数的和
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i <= 100; i++) {
            if(i%2!=0){//奇数
                oddSum+=i;//oddSum = oddSum + i;
            }else{//偶数
                evenSum+=i;
            }
        }
        System.out.println("奇数之和为:"+oddSum);
        System.out.println("偶数之和为:"+evenSum);
    }
}

例3:输出1-1000之间能被5整除的数,并且每行输出3个

public class ForDemo03 {
    public static void main(String[] args) {
        //练习2:输出1-1000之间能被5整除的数,并且每行输出3个

        for (int i = 0; i <= 1000; i++) {
            if(i%5==0){
                System.out.print(i+"\t");//输出完不换行
            }
            if(i%(5*3)==0){//每行
                System.out.println();
                //System.out.println("\n");
            }
        }
    }
}

例4:打印九九乘法表

public class ForDemo04 {
    public static void main(String[] args) {
        //练习3:打印九九乘法表

         /*1、打印第一列
       for (int i = 0; i < 10; i++) {
           System.out.println(1+"*"+i+"="+(1*i));
        }
        2、我们把固定的1再用一个循环包裹起来
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                System.out.print(j+"*"+i+"="+(j*i)+"\t");
            }
            System.out.println();
            } 
        3、去掉重复项,j <= i
        4、调整样式
         */
    
        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();
        }
    }
}

4、增强For循环

  • 增强For循环基本语法
for(声明语句:表达式){
    //代码句子
    }
//声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
//表达式:表达式是要访问的数组名,或者是返回值为数组的方法

例:

public class StrongForDemo01 {
    
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50};//定义了一个数组

        for(int x:numbers){
            System.out.println(x);
        }//执行结果与下列注释的语句结果一样
        
        /*
        for(int i=0;i<5;i++){
        System.out.println(numbers[i]);
        }
         */
    }
}

5、打印三角形

public class TestDemo01 {
    //打印三角形 5行
    public static void main(String[] args) {

        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            for (int j = 1; j<=i;j++){
                System.out.print("*");
            }
            for (int j = 1; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
posted @ 2022-10-24 23:44  司空颜  阅读(34)  评论(0)    收藏  举报