Java中的流程控制语句

流程控制语句

定义:

通过一些语句,控制程序的执行流程。

顺序结构

定义:

是Java程序默认的执行流程,按照代码的先后顺序,从上到下一次执行。

分支结构

if

定义:

在程序中用来进行判断的。

格式:
  1. if(关系表达式){

    ​ 语句体;

    }

    if的注意点:
    • 大括号的开头可以另起一行,但是建议写在第一行末尾。
    • 在语句体中,如果只有一句代码,大括号可以省略不写
    • 如果对一个布尔类型的变量进行判断,不要用==号,直接把变量写在小括号即可。
    练习——自动驾驶

    有一辆自动驾驶的汽车。如果是红灯就会自动停止,如果是绿灯就会自动驾驶。

    1718676749409

  2. if(关系表达式){

    ​ 语句体1;

    }else{

    ​ 语句体2 ;

    }

    1718675258185

    1718676918701

    练习1——商品付款

    需求:假设,用户在超市实际购买,商品总价为600元。键盘录入一个整数表示用户实际支付的钱。如果付款大于等于600,表示付款成功。否则付款失败。

    练习2——影院选座

    需求:假设某电影院,它买的票有票号。票号的范围是1~100。如果你买到的是奇数的票号坐左边。反之,坐右边。键盘录入一个整数表示电影票的票号。根据不同情况,给出不同的提示:

    如果票号为奇数,打印坐左边。如果票号为偶数,打印坐右边。

  3. if(关系表达式1){

    ​ 语句体1;

    }else if(关系表达式2){

    ​ 语句体2 ;

    }

    ​ ···

    else{

    ​ 语句体n+1 ;

    }

从上往下一次判断,只要有一个判断为真,就执行对应的语句体。如果所有的判断都为假,就执行else的语句体。

1718677499259

1718678004090

练习——商品的价格

需求:商场都会有VIP的会员制,根据不同的会员会有不同的折扣。假设商品总价为10000 。

键盘录入会员级别,并计算出实际支付的钱。

会员1级:打9折

会员2级:打8折

会员3级:打7折

非会员:不打折

switch

格式:
switch(表达式){
	case1:
		语句体1;
		break;
	case2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;

}

1718678585783

1718678672654

1718678743708

练习——学习计划

需求:键盘录入星期数,显示今天的学习活动。

周一:学语文

周二:学数学

周三:学英语

周四:学地理

周五:学物理

周六:学生物

周日:休息

default的位置和省略

位置:default位置不一定是写在最下面的,只不过我们平时习惯写在最下面。

省略:default可省,语法不会报错,但是不建议。

public class switchDemo{
	public static void main(String[] args){
		int number =1;
		switch(number){
			case 1:
				System.out.println("number的值为1");
				break;
			case 10:
				System.out.println("number的值为10");
				break;
			case 100:
				System.out.println("number的值为100");
				break;
			default:
				System.out.println("number的值为不是1,10,100");
				break;
		}
	}
}
case穿透
产生原因:

语句体中没有写break导致的。

执行流程:
  • 首先还是会那个小括号中表达式的值跟下面每一个case进行匹配。
  • 如果匹配上了,就会执行对应的语句体,如果此时发现了break,那么结束整个switch语句。
  • 如果没有发现break,那么程序会继续执行下一个case的语句体,一直遇到break或者大括号为止。
使用场景:

如果多个case的语句体重复了,可以考虑利用case穿透去简化代码。

switch新特性(JDK12+)
  • 用->替换: 用{}替换break,不会发生case穿透。
  • 当语句体只有一句时,{}可以省略。
public class switchDemo{
	public static void main(String[] args){
        int number = 1;
        switch(number){
                case 1 -> System.out.println("一");
                case 2 -> {
                    System.out.println("二");
                }
                case 3 -> {
                    System.out.println("三");
                }
                default -> {
                    System.out.println("没有这个选项");
                }
        }
    }
}
  • JDK14中扩展了switch可以作为表达式进行赋值或打印操作
public class SwitchTest {
    public static void main(String[] args) {
        Weekday day = Weekday.MON; //初始化一个枚举变量

        //JDK14中扩展了switch可以作为表达式
        //将表达式的值打印出来
        System.out.println(switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        });

        //将表达式的值赋值给一个变量
        String text = switch(day){
            case MON, TUE, WEN -> "上半周";
            case THU, FRI      -> "下半周";
            case SAT, SUN      -> "周末";
        };

    }
}

//定义枚举
enum Weekday{
    MON,TUE,WEN,THU,FRI,SAT,SUN
}

switch和if第三种格式各自的使用场景

if第三种格式:一般用于对范围的判断

switch:把有限个数据一一列举出来,让我们任选其一

练习——休息日和工作日

需求:键盘录入星期数,输出工作日、休息日。(1-5)工作日,(6-7)休息日。

循环结构

定义:

重复的做某件事情

具有明确的开始和停止标记

for

格式:

  • 初始化语句只执行一次
  • 判断语句为true,循环继续
  • 判断语句为false,循环结束
for(初始化语句;条件判断语句;条件控制语句){
    循环体语句;
}

1718681986973

1718682160016

练习——输出数字

需求1:打印1-5

需求2:打印5-1

package com.example.demo;

public class Test {
    public static void main(String[] args){
//        需求1
        for(int i = 1;i <= 5; i++){
            System.out.println(i);
        }
//        需求2
        for(int z = 5; z >= 1; z--){
            System.out.println(z);
        }

    }
}
练习——求和

需求:求1-5之间的和

package com.example.demo;

public class Test {
    public static void main(String[] args){
//        需求:求1-5的和
      //扩展小点:
      //1.求和的变量不能定义在循环里面,因为变量只在所属的大括号中有效
 //2.如果我们把变量定义在循环的里面,那么当前变量只能在本次循环中有效。
        //当本次循环结束之后,变量就会从内存中消失
        //第二次循环开始的时候,又会重新定义一个新的变量。
        int sum = 0;
        for(int i = 1;i <= 5; i++){
           sum += i;
        }
        System.out.println(sum);
    }
}

需求:求1-100之间的偶数和

package com.example.demo;

public class Test {
    public static void main(String[] args){
//        需求:求1-100的偶数和
        int sum = 0;
        for ( int i = 1; i <= 100; i++) {
            if(i % 2 == 0) {
                sum += i;
            }
        }
        System.out.println(sum);
    }
}

需求:键盘录入两个数字,表示一个范围。统计这个范围中:既能被3整除,又能被5整除的数字有多少个?

package com.example.demo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
//        需求:键盘录入两个数字,表示一个范围。统计这个范围中:既能被3整除,又能被5整除的数字有多少个?
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数表示范围的开始");
        int a = scanner.nextInt();
        System.out.println("请输入一个数字表示范围的结束");
        int b = scanner.nextInt();
        int count = 0;
        for (int i=a;i<=b;i++){
            if(i%3== 0 && i%5 == 0){
                count++;
            }
        }
        System.out.println(count);
    }
}

while

格式:
初始化语句;
while(条件判断){
	循环体语句;
	条件控制语句;
}
  • 初始化语句只执行一次
  • 判断语句为true,循环继续
  • 判断语句为false,循环结束

for和while的对比

相同点:运行规则都是一样的

区别:

for循环中,控制循环的变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次访问到了。知道循环的次数或者循环的范围。

while循环中控制循环的变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用。不知道循环的次数和范围,只知道循环的结束条件。

练习——打印折纸的次数

需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        //纸张初始厚度
        double paper = 0.1;
        //山峰高度
        double hight = 8844430;
        //统计次数
        int count = 0;
        while ( paper <= hight){
            //折叠纸张
            paper  *= 2;
            count++;
        }
        System.out.println(count);

    }
}
练习——回文数

需求:给你一个整数X。如果X是一个回文整数,打印true,否则,返回false。

解释:回文整数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如:121是回文,123不是。

package com.example.demo;

public class Test {
    public static void main(String[] args) {
//       1.定义数字
        int x = 1234;
//        用来记录x原来的值
        int temp = x;
        int num = 0;
//        2.利用循环开始
        while(x != 0){
//            从右往左获取每一位数字
            int ge = x % 10;
            x /= 10;
            //把当前获取的数字拼接到最右边
            num = num * 10 + ge;
        }
        System.out.println(num);
//        比较
        System.out.println(num == temp);
    }
}
练习——求商和余数

需求:给定两个整数,被除数和除数(都是正数,且不超过int的范围)

将两数相除,要求不使用乘法、除法和%运算符。

package com.example.demo;

public class Test {
    public static void main(String[] args) {
//        定义变量记录被除数
        int dividend = 100;
//        定义变量记录除数
        int dividor = 10;
//        记录商
        int count = 0;
//        只要被除数大于或等于除数,就一直循环
        while ( dividend >= dividor){
//            记录余数
          dividend = dividend-dividor;
          count++;
        }
        System.out.println(dividend);
        System.out.println(count);
    }
}

do…while

格式:

初始化语句;
do{
	循环体语句;
	条件控制语句;
}while(条件判断语句);

1718694803978

先执行后判断

循环高级

无限循环

循环一直停不下来

1718695084325

1718695111186

1718695136106

注意事项:

无限循环的下面不能再写其他代码了,因为循环永远停不下来,那么下面的代码永远不会被执行。

跳转控制语句

在循环的过程中,跳到其他语句上执行

**continue:**结束本次循环,继续下次循环。

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i<= 5; i++){
            if(i == 3){
                continue;
            }
            System.out.println("小老虎在吃第"+i+"包子");
        }

    }
}

1718695463033

break:结束整个循环

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i<= 5; i++){
            if(i == 3){
               break;
            }
            System.out.println("小老虎在吃第"+i+"包子");
        }
    }
}

1718695559121

练习

案例1:逢七过

游戏规则:从任意一个数字开始报数,当你要报的数字是7的倍数或者包含数字7时都要说:过

需求:使用程序在控制台打印出1-100之间的满足逢7必过规则的数据

package com.example.demo;

public class Test {
    public static void main(String[] args) {
        for (int i = 1; i<= 100; i++){
            if(i % 10 == 7 || i/10%10== 7 || i%7 == 0){
                System.out.println("过");
               continue;
            }
            System.out.println(i);
        }
    }
}
案例2:求平方根

需求:键盘录入一个大于等于2的整数x,计算并返回x的平方根。结果只保留整数的部分,小数部分将被丢弃。

package com.example.demo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        for (int i = 2; i<= x;i++){
           if ((i * i) == x){
               System.out.println(i+"就是"+x+"的平方根");
               break;
           }else if((i * i) > x){
              System.out.println((i - 1)+ "就是" + x + "平方根的整数部分");
              break;
          }
       }
    }
}
案例3:求质数

需求:键盘录入一个正整数x,判断该整数是否为一个质数。

package com.example.demo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        boolean flag = true;
        for (int i = 2; i<= x-1;i++){
            if(x % i == 0 ){
                flag = false;
                break;
            }
       }
        if(flag){
            System.out.println(x+"是一个质数");
        }else {
            System.out.println(x+"不是一个质数");
        }
    }
}
案例3:求质数

需求:键盘录入一个正整数x,判断该整数是否为一个质数。

package com.example.demo;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        boolean flag = true;
        for (int i = 2; i<= x-1;i++){
            if(x % i == 0 ){
                flag = false;
                break;
            }
       }
        if(flag){
            System.out.println(x+"是一个质数");
        }else {
            System.out.println(x+"不是一个质数");
        }
    }
}
  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值