【JAVA基础】重新系统学习Java(二)程序流程控制

程序流程控制

流程控制语句

java提供了一些流程控制语句,来控制程序的执行流程

分支结构

if分支

根据判断的结果决定执行某个分支的代码

if语句格式1

if (关系表达式) {
    语句体;	
}

if语句格式2

if (关系表达式) {
    语句体1;	
} else {
    语句体2;	
}

if语句格式3

if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
}else {
    语句体n+1;
}

switch

匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好

执行流程

先执行表达式的值,拿值去与case后的值进行匹配

匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支

如果case后的值都不匹配则执行default代码

格式:

switch(表达式){
    case1:
        执行代码...;
        break;
    case2:
        执行代码...;
        break;    
    case3:
        执行代码...;
        break;
    ...
    default:
        执行代码n;
}

switch注意

表达式类型只能是byte,short,int,char,JDK5开始支持枚举,JDK7开始支持String,不支持double,float,long

case给出的值不允许重复,且只能是字面量,不能是变量

不要忘记写break,否则会出现穿透现象

switch的穿透性

如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性

当存在多个case分支的功能代码是一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码。

if与switch

if在功能上强于switch

if适合做区间匹配

switch适合做值匹配的分支选择,代码优雅

循环结构

for循环

控制一段代码反复执行很多次

格式

for(初始化语句;循环条件;迭代语句){
    循环体语句(重复执行的代码);
}

案例

求1-5之间的数据和,并把求和结果在控制台输出

package com.cat.test;

public class Test3 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 5; i++) {
            sum += i;
        }
        System.out.println(sum);
    }
}

求1-10之间的奇数和,并把求和结果在控制台输出

方法一:

定义for循环使其能够依次访问1,2,3,4,5,6,7,8,9,10

在for循环中,通过if筛选出奇数

在循环外定义一个整数变量sum来累加这些数据

方法二:

定义for循环使其能够依次访问:1,3,5,7,9

在循环外定义一个整数变量sum来累加这些数据

package com.cat.test;

public class Test3 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 10; i += 2) {
            sum += i;
        }
        System.out.println(sum);
    }
}

水仙花数

需求:在控制台输出所有的“水仙花数”,水仙花数必须满足如下2个要求:

1.水仙花数是一个三位数

2.水仙花数的个位、十位、百位的数字立方和等于原数

package com.cat.test;

public class Test3 {
    public static void main(String[] args) {
        //在循环外定义一个变量用于记录水仙花的个数
        //第一步:定义一个for循环找到所有三位数100-999
        //第二步:将每个数据的个位十位百位提取出来
        //第三步:用if判断:个位十位百位数字的立方和是否等于原数,等于则输出该数据
        int count = 0;
        for (int i = 100; i <= 999; i++) {
            int g = i % 10;
            int s = i / 10 % 10;
            int b = i / 100;
            int add = g * g * g + s * s * s + b * b * b;
            if (add == i) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("水仙花个数是:"+count);
    }
}

while循环

while循环格式与执行流程

初始化语句;
while(循环条件){
    循环体语句(被重复执行的代码);
    迭代语句;
}

for与while

功能上是完全一样的,for能解决的while也能解决,反之亦然

使用规范:知道循环几次:使用for;不知道循环几次建议使用:while

案例

折叠珠穆朗玛峰

珠峰高度8848.86米=8848860毫米,有一张足够大的纸,厚度0.1毫米。请问折叠几次,可以折成珠穆朗玛峰的高度

package com.cat.test;

public class Test4 {
    public static void main(String[] args) {
        //定义比变量存储珠峰和纸的高度
        //使用while循环,循环条件是(纸张厚度<山峰高度),内部控制纸张折叠,每折一次,纸张厚度变为原来的两倍,循环外定义计数变量,每次折叠+1
        double height = 8848860;
        double paper = 0.1;
        int count = 0;
        while (paper < height) {
            paper *= 2;
            count++;
        }
        System.out.println(count);
    }
}

do-while循环

先执行再判断循环条件

特点:一定会先执行一次循环体

格式

初始化语句;
do{
  循环体语句;
  迭代语句;
}while(循环条件);

三种循环区别

for循环和while循环(先判断后执行)

do…while(第一次先执行后判断)

for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。

全选代码按Ctrl+alt+T能直接放入各种结构

死循环

一直循环下去,如果没有干预不会停止下来

经典写法

while(true){
    System.out.println("!");
}


do{
    System.out.println("!");
}while(true);

案例

密码验证

package com.cat.test;

import java.util.Scanner;

public class Test5 {
    public static void main(String[] args) {
        int okpassword = 520;
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入正确的密码:");
            int password = sc.nextInt();
            if (password == okpassword) {
                System.out.println("登录成功");
                break;//结束当前所在循环的执行
            } else {
                System.out.println("密码错误");
            }
        }
    }
}

循环嵌套

特点:外部循环每循环一次,内部循环完全执行完一次

跳转关键字

break:跳出并结束当前所在循环的执行

continue:用于跳出当前循环的当次执行,进入下一次循环

注意

break只用于结束所在循环,或者结束所在switch分支的执行

continue只能在循环中进行使用。

package com.cat.test;

public class Test7 {
    public static void main(String[] args) {
        //理解break和continue的作用
        //场景:循环五天,但是第三天中途截止
        for (int i = 0; i < 5; i++) {
            System.out.println("正常");
            if (i == 2) {
                break;//跳出并结束当前循环的执行
            }
        }

        //continue
        //场景:循环五天,但是第三天暂停,第四天恢复
        for (int i = 1; i <= 5; i++) {
            if (i == 3) {
                continue;//立即跳出当次执行,进入循环下一次
            }
            System.out.println("洗碗" + i);
        }
    }
}

break特殊用法

Scanner sc = new Scanner(System.in);
        OUT:
        while (true) {
            System.out.println("输入一个数字:");
            int g = sc.nextInt();
            for (int i = 0; i < num.length; i++) {
                if (g == num[i]) {
                    System.out.println("运气不错,猜中了。该数据第一次出现的位置为" + i);
                    break OUT;
                }
            }
            System.out.println("未猜中");
        }

随机数Random类

Random随机数技术

作用:用于在程序中获得随机数的技术

步骤

1.导包

2.得到随机数

3.调用随机数的功能获取0-9的随机数

package com.cat.test;

import java.util.Random;

public class Test8 {
    public static void main(String[] args) {
        Random r = new Random();
        int a = r.nextInt(10);
        System.out.println(a);

    }
}

注意

nextInt(n)功能只能生成0至n-1之间的随机数,不包含n

技巧

r.nextInt(10)只能生成0-9,但是r.nextInt(10)+1能生成1-10

r.nextInt(origin:10,bound:31)代表10-30

案例:猜数字游戏

随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏

package com.cat.test;

import java.util.Random;
import java.util.Scanner;

public class Test9 {
    public static void main(String[] args) {
        Random r = new Random();
        int num = r.nextInt(100) + 1;
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请猜测数据:");
            int g = sc.nextInt();
            if (g > num) {
                System.out.println("猜大了");
            } else if (g < num) {
                System.out.println("猜小了");
            } else {
                System.out.println("正确,是" + g);
                break;
            }
        }

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值