Java基础语法 - 流程控制

36 阅读3分钟

流程控制分类

流程控制:通过语句,控制程序的执行流程

  • 顺序结构
  • 分支结构(if switch)
  • 循环结构(for while do-while)

分支结构

if结构

if(条件表达式){
    语句块;
}
  • 若语句体中只有一条语句,那么大括号{}可以省略不写(尽量不要不写,有的语句可能会被当作两条)
if(条件表达式){
    语句块1;
}else{
    语句块2;
}
  • 条件为真,执行语句块1,否则执行语句块2
if(条件表达式){
    语句块1;
}else if(条件表达式2){
    语句块2;
}else if(条件表达式3){
    语句块3;
}......
else{
    语句块n;
}

Switch结构

switch(表达式){
    case1:
        语句块1;
        break
    case2:
        语句块2;
        break;
    ......
    default:
        语句块n;
        break;
        
}
  • 表达式:取值为byte short int cha 枚举String`
  • case:被匹配的值
  • break:中断switch语句,取消后续匹配
  • default:不符合所有case时默认语句
  • case的值不可重复

case穿透

当其中一个case没有写break的时候,会发生case穿透,后续的case不再具有匹配效果,而会直接运行其代码块的语句,直到遇到break停下来。

利用这个原理,可以对case进行合并

static void Score(){
        Scanner scan = new Scanner(System.in);
        while (true) {
            System.out.print("请输入成绩");
            int number = scan.nextInt();
            switch (number / 10) {
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    System.out.println("成绩不合格,继续努力!");
                    break;
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    System.out.println("成绩合格!继续保持!");
                    break;
                default:
                    System.out.println("输入不合法,请重试");
            }
        }
    }

当输入一个50后,会从0开始向下穿透,符合5,则输出信息,停止后续匹配,实现case的合并

若多个case需要执行相同的语句,可以考虑使用case穿透

循环结构

for循环

循环:重复执行语句

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

输出1~100所有整数和

public class 循环输出100内偶数和 {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                sum = sum + i;
            }
        }
        System.out.println("100内所有的偶数和为:" + sum);
    }
}

最大公约数和最小公倍数

import java.util.Scanner;
public class 求最大公约数和最小公倍数 {
    public static void main(String[] args) {
        int m,n,gys=0,gbs=0;
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入第一个整数:");
        m = scan.nextInt();
        System.out.print("请输入第二个整数:");
        n = scan.nextInt();
        int big = (m>n)?m:n;
        int small=(m>n)?n:m;
        //最大公约数
        for (int i=small;i>=1;i--){
            if (m % i == 0 && n % i == 0){
                gys = i;
                break;
            }
        }
        //最小公倍数
        for (int i = big;i< m * n ; i++ ){
            if (i % m == 0 && i % n == 0){
                gbs = i;
                break;
            }
        }
        System.out.println("最大公约数为"+gys);
        System.out.println("最小公倍数为"+gbs);
    }
}

水仙花数

  • 三位数
  • 个位、十位、百位的数的立方和不能为原数
public class 求解水仙花数 {
    public static void main(String[] args) {
        System.out.println("求解水仙花数");
        for (int i = 100;i<1000;i++){
            if (i == (i%10)*(i%10)*(i%10)+(i%100/10)*(i%100/10)*(i%100/10)+(i/100)*(i/100)*(i/100)){
                System.out.println(i);
            }
        }
    }
}

九九乘法表

public class 九九乘法表 {
    public static void main(String[] args){
        for (int i = 1;i<=10;i++){
            for (int j = 1 ;j<=i;j++){//第j列有最多i个式子
                System.out.print(j + "*" + i + "=" + (i*j) + " " );
            }
            System.out.println();//输出完一行换行
        }
    }
}

while循环

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

从键盘读入个数不确定个整数,判断输入的正数和负数的个数,按0结束程序

import java.util.Scanner;
public class 判断正数负数个数 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int zhengshu=0,fushu=0,number=0;
        while(true){
            number = scan.nextInt();
            if(number > 0){
                zhengshu +=1;
            }else if (number<0){
                fushu +=1;
            }
            if (number == 0){
                break;
            }
        }
        System.out.println("你输入的正数共有"+zhengshu+"个");
        System.out.println("你输入的负数共有"+fushu+"个");
​
    }
}

do-while循环

先执行,后判断,至少执行一次循环体

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

使用场景

  • 明确循环次数,使用for循环
  • 不明确循环次数,使用while循环
  • 基本不适用do-while循环

跳转控制语句

  • continue
  • break

continue可以结束本次循环,进入下一次循环

// 打印除了5以外1-10的数字
for(int i=1;i<=10;i++){
    if(i==5){
        continue;
    }
    System.out.println(i);
}

break会结束循环

//打印1~4
for(int i=1;i<=10;i++){
    if(i==5){
        break;
    }
    System.out.println(i);
}

标号

package 第一章基础;
​
import java.util.Scanner;
​
public class 跳转控制 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(true){
            System.out.println("请输入成绩:");
            int score = scanner.nextInt();
            switch (score/10){
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    System.out.println("成绩不合格,继续努力!");
                    break;
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    System.out.println("成绩合格!继续保持!");
                    break;
                default:
                    System.out.println("输入不合法,请重试");
            }
        }
    }
}
​

在上面的程序中,使用break只能结束switch的循环,而无法结束while的循环,为了结束指定的循环,需要使用标号

package 第一章基础;
​
import java.util.Scanner;
​
public class 跳转控制 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 使用标号
        loop:while(true){
            System.out.println("请输入成绩:");
            int score = scanner.nextInt();
            switch (score/10){
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    System.out.println("成绩不合格,继续努力!");
                    // 跳出指定标号的循环
                    break loop;
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                    System.out.println("成绩合格!继续保持!");
                    // 跳出指定标号的循环
                    break loop;
                default:
                    System.out.println("输入不合法,请重试");
            }
        }
    }
}
​

Random随机数

作用:产生一个随机数

导包

import java.util.Random;

实例化

Random r = new Random();

获取随机数

int number = r.nextInt(10);// 0~10,左闭右开