Java流程控制

一.什么是流程控制

Java程序在运行时,会有以下三种执行结构:

1.顺序结构:代码从上到下,依次执行,这是代码执行的基本结构。

2.分支结构:代码执行到某一代码片段时,遇到了多种继续执行的可能性,

需要选择一种可以执行的继续执行。

3.循环结构:代码执行到某一片段时,由于某种条件,需要执行多次。

二.分支流程控制

2.1 if-else 相关语法

 if(boolean表达式){
       //code1:表达式返回true执行
        }else{
      //code2:表达式返回false执行
        }

这种结构相对简单,我们通过一个小案例来解释一下

package com.basic.day03.branch;
public class _01IfDemo {
    public static void main(String[] args) {
        //三目运算
        int a = 10;
        int b = 20;
        String str = a<b ? "正确":"错误";
        System.out.println("a<b?"+str);

        //将上述代码转成if-else分支结构的语法
        if(a<b){
            System.out.println("正确");
        }else{
            System.out.println("错误");
        }
        System.out.println("--main方法结束--");
    }
}

代码的前半部分使用了三目运算,判断出“a<b”这个布尔值是true,所以选择“正确”赋值

而把它改写成if-else分支语句写法相对简单,先在if的()填充布尔值,else不需要填充,只需要分别在if和else的{}中分别给上 System.out.println("正确"); 或者错误就可以。最后的返回结果如下:

2.2 if 单分支语法

在 if-else 语句中,可以不写else部分,这个分支依然成立;

1.带有else语句块的分支结构,一定会执行某一分支 

2.不带else语句块的分支结构,可能一条分支都不执行 

3.if分支结构不可能执行多条分支

我们通过一个案例来解释:

package com.basic.day03.branch;

public class _05IfDemo {
    public static void main(String[] args) {
        //年满十八岁,才可以单独进入澡堂子洗澡
        int age = 16;
        if (age > 18) {
            System.out.println("可以单独进入澡堂子");
        }
        System.out.println("--------------------");

        int answer = (int)(Math.random() * 10);
        if (answer>6) {
            System.out.println("随机出来的数字大于6");
        } else if (answer>3) {
            System.out.println("随机出来的数字大于3");

        }
        System.out.println("--main方法结束--");
    }
}

首先设置一个int类型的变量age并赋值为16,然后用一个单独分支的if语句判断,返回结果是空的,这个过程不需要else语句;

而下一部分也是这样,设置一个[0,10)的随机数,如果大于6,就打印出来,如果大于3,也可以打印出来,但是若是小于等于3,最终的结果还是不显示出来。

2.3 多分支语法

在if-else语句中,多分支语法属于一种嵌套格式,在if或者else中嵌套更多的if或else if。

直接上案例:

package com.basic.day03.branch;

import java.util.Scanner;

public class _04IfDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = sc.nextInt();
        if (num<0|| num>100) {
            System.out.println("输入有误,请重新输入");
                }else{
            if(num >=90){
                System.out.println("优秀");
            } else if (num>=80) {
                System.out.println("良好");
            } else if (num>=60) {
                System.out.println("及格");
            } else {
                System.out.println("不及格");
                
            }
        }
        sc.close();
    }
}

在第一个else中,我们嵌套了一个if,达成了多分支,最后用一个else收尾,这也属于引用了一个scanner类来完成这个案例,需要注意if中执行的是boolean类型的判断语句。返回结果

2.4 Switch-case

语法: switch(变量|具有返回值的表达式){

    case 值1:  code1;

    case 值1:  code1;

    case 值1:  code1;

     .......

    default 值N   codeN;

注意事项:

1若是想让Java执行值后的code代码,必须要让(变量|具有返回值的表达式)与case值完全相同

2.(变量|具有返回值的表达式)的类型只能是byte,short,int,char,String,枚举。

3.(变量|具有返回值的表达式)会选择case的值一一对照,知道完全相同为止,如果都对照不上,则会执行default的值。

4.switch语句具有穿透性,当switch与某一个值对应成功,则不会继续对照后面case的值,执行后面的所有代码,如果想取消穿透性,则需要使用关键字 break

break的作用是跳出switch结构

我们上一个案例:

public class _06SwitchCaseDemo {
    public static void main(String[] args) {
        int num = (int)(Math.random()*5);
        switch(num) {
            case 0:
                System.out.println("随机的是0");break;
            case 1:
                System.out.println("随机的是1");break;
            case 2:
                System.out.println("随机的是2");break;
            case 3:
                System.out.println("随机的是3");break;
            default: //相当于else但还是有区别
                System.out.println("随机的是4");

        }

    }
}

通过上述的代码和运行结果我们可以发现,我们首先设置了0~5的随机数,然后使用switch-case结构,来显示生成的随机数是几,需要在每步跳出结构,要不然会多次运行输出语句

2.5if 和switch的使用场景

如果使用场景是一个确定的范围,则使用if结构;

如果使用场景是一个确定的值,则使用switch-case结构,if结构也可以。

三.循环流程控制

3.1 for 循环

语法:for(循环起点,循环条件,循环步长){

          code //循环体,当满足循环条件时,这里的代码会循环运行

}

我们需要在循环起点声明变量并初始化,for循环的工作流程是重复执行循环条件,循环体,循环步长,知道变量不满足循环条件,会跳出循环。

我们看一个最简单的循环案例:

  for(int i = 1; i <= 10; i++){
            System.out.println("Hello world");

首先声明变量 i 并初始化值为1,设置循环条件小于等于10,i每次循环会自增1,我们可以判断,会循环10次,则会执行10次输出语句,最后的返回结果是:

我们也可以在输出语句中打印变量的值:

for(int i = 1; i <= 10; i++){
            System.out.println("i的值:"+i);
        }

和上述代码类似,这次打印的值是  i 的值了

for循环执行10次,则会返回从1~10的10个数字:

此外,我们还可以在for循环的循环起点改变变量值,也可以改变循环条件,比如

使用for循环生成20以内的偶数:

 for(int i = 2; i <=20; i+=2){
            System.out.println("i的值:"+i);

这样就会生成10个20以内的偶数

我们可以利用for循环生成一个5*5的*方阵:

 for(int i=0 ; i<5 ; i++ ){
            System.out.println("*****");
        }

初始变量值设置为0,i<5,那么会循环5次,每次都输出字符串"*****"

我们还可以使用for循环来计算1~100的和:

我们需要先定义一个变量sum作为计算和的接受变量;

 int sum = 0;
        for(int i = 1;i <=100;i++){
           sum = sum+i;
        }
        System.out.println("1~100的和:"+sum);

需要注意:  sum = sum +i 的意思等同于 sum += i,这是一个累加操作,来计算总和

在for循环结构中:

for()中除了;;都可以不写

循环起点中的变量可以在for循环前面提前声明的初始化

循环步长可以写在循环体中

循环条件如果不写,默认值是true,相当于死循环。

//循环因子的声明和初始化写在了for循环之前
        int i= 1;
        for(;i<10;i++){
            System.out.println(i);
        }

这段代码就是把循环起点中的变量的声明和初始化都放在了for循环的前面,依旧可以运行

//循环步长写在循环体内:
        for (int m = 0;m<10;){
            System.out.println(m);
            m+=3;
        }

这段代码就是把循环步长写在了循环体内,依然不影响运行,但是需要注意的是,以上两种方式,都不要忘记写()中的两个";"

当循环体的代码只有一行时,可以省略{ }

//循环体中只有一行代码时,可以省略{}
        for(int n = 0;n<10;n++)
            System.out.println("n="+n);

这样依旧可以正常运行

if-else也是一样的,如果结构体中只有一行代码的话,可以不用写{ }

int x = (int)(Math.random()*2);
int y = (int)(Math.random()*2);
        if(x==y)
            System.out.println("x和y相等");
        else
            System.out.println("x和y不相等");

 3.2 while 结构

语法:  while(循环条件){

           code//循环体

}

int i = 0;  //循环要素之循环变量的声明和初始化写在while之前
        while(i<5){
            i++; //循环要素之循环步长,写在了循环体中
            System.out.println("hello world");
        }

我们需要把循环变量的声明和初始化放在while()的前面;

其次,循环条件放在while()中,

循环步长放在了循环体中;

最后得到的结果就是:

可以看到,打印了五次hello world 

案例1:使用while循环,打印100以内能被5整除的数字

int b = 1;
        while(b <101){
            b++;
            if(b % 5 == 0){
                System.out.println("b: " + b);
            }
        }

通过上述代码,首先声明了循环变量 b 并初始化值为1;

循环条件是小于101,

循环体中先设置了循环步长,b自增1,执行代码设置了一个if结构,判断b模5是否等于0,如果等于0就打印b

案例2:  使用while循环,计算100以内能被3整除的数字和

肯定需要事先定义一个变量sum 来计算总和,然后使用while循环,控制条件小于等于100

int sum = 0;
        int a=1;
        while (a<101){
            if(a % 3 == 0){
                sum += a;
            }
           a++;
        }
        System.out.println("sum: " + sum);

if中的判断语句需要注意==, sum +=a 的意思等价于 sum = sum+a,是累加的意思,需要在if判断语句的后面加上循环步长a++,

案例3:使用while语句,判断一个数是几位数

int num = 0;
       int count = 1;//定义一个变量,统计循环次数,也就是除以10的次数
       while (num/10!=0) {//判断num是不是一位数,如果不是一位数,就进入循环体,如果是,就直接打印了
           num = num / 10;
           count++;
       }
       System.out.println("是"+count+"位数");

首先定义了循环变量并初始化值为0;

之后定义了一个统计变量count,来统计除10的次数

循环条件是num/10!=0,如果初始变量num输入的是0,则不会进入循环,直接在后面打印是1位数

如果初始变量设置的比较大,就会进入循环体,先除10,然后count自增1,表示多了一位,直到变量num比10小,除10等于0,结束循环,输出count的值作为位数。

3.3 do while 循环结构

语法:  

do{

循环体

}while(循环条件)

特点:  先执行一遍循环体,再判断是否满足循环条件,如果满足,循环执行循环体

            如果循环条件一开始就不成立,则do while 比 while 多执行一次循环体。

package com.basic.day04.loop;
import java.util.Scanner;
public class _05DoWhileDemo {
    public static void main(String[] args) {
        //使用for或者while来完成模拟ATM机输入密码操作,5次不正确就结束循环。
        String realPWD = "123456";
        Scanner sc = new Scanner(System.in);
        boolean flag = false; //false表示关闭
        for (int i = 0; i < 5; i++) {
            System.out.println("请输入密码:");
            String inputPWD = sc.nextLine();
            if (inputPWD.equals(realPWD)) {
                flag = true;
                break;
            }
        }
        if (flag) {
            System.out.println("密码正确");
        } else {
            System.out.println("密码错误");
        }
    }
}

首先导包关于Scanner的,先声明一个字符串变量 realPWD 代表真实的密码

之后引用Scanner类,然后定义一个boolean类型的变量,作用是判断,初始值设置为false

使用for循环设置循环变量初始值为1,循环条件小于5(即循环5次),循环步长是i++

扫描字符串类型变量inputPWD,然后通过if判断语句,如果输入的密码和真实密码相同则跳出循环,需要设置跳出循环的关键字break

之后再for循环外设置一个if判断语句,如果布尔值是true就打印密码正确,其他情况密码错误。

我们可以使用 do while来完成这一个案例:

package com.basic.day04.loop;
import java.util.Scanner;
public class _06DoWhileDemo {
    public static void main(String[] args) {
        String realPWD = "123456";
        String inputPWD = " ";

        Scanner sc = new Scanner(System.in);
        do{
            System.out.println("请输入密码");
            inputPWD = sc.nextLine();
        }while(!realPWD.equals(inputPWD));
        if(inputPWD.equals(realPWD)){
            System.out.println("密码正确");
        }else{
            System.out.println("密码错误");
        }

    }

}

我们首先定义了正确的密码是123456,输入密码是空字符串,然后引用Scanner方法,进入do-while结构先执行一遍循环体,扫描在控制台输入的inputPWD,然后判断循环条件是否成立,如果输入的密码与真实的密码不一样,则继续循环。最后执行一个判断语句,如果密码相等,则输出密码正确。

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值