03 JavaSE—程序逻辑控制

Posted /少司命

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 JavaSE—程序逻辑控制相关的知识,希望对你有一定的参考价值。

目录

一,写在前面

二,顺序结构

 三,分支结构

1,if 语句

 2,switch 语句

三,循环结构

1,while 循环

2,break

 3,continue

 4,for 循环

四,输入输出

1,输出到控制台

2,从键盘输入

五,基础练习

1,年龄分析

2,判断一个数是否为素数

3,输出 1000 - 2000 之间所有的闰年

4,输出乘法口诀表

 5,求两个正整数的最大公约数

 6,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。


一,写在前面

如果你对Java感兴趣,那么你可以关注我这个小博主,你信任我,我也会提升我博客的质量,最好是保姆级教学,保证就算你是小白看过我的博客后,你也能学的懂,当然你最起码要懂一点最基本的编程语言知识。如果你认为本篇博客写的不错的话,求点赞,求评论,求收藏。

二,顺序结构

顺序结构比较简单. 像我们之前写过的代码就是顺序结构的, 按照代码书写的顺序一行一行执行。

public static void main(String[] args) {
        System.out.println("aaa");
        System.out.println("bbb");
        System.out.println("ccc");
    }

 如果调整代码的书写顺序, 则执行顺序也发生变化

 public static void main(String[] args) {
        System.out.println("aaa");
        System.out.println("ccc");
        System.out.println("bbb");
    }

 三,分支结构

1,if 语句

基本语法形式1

if(布尔表达式){
    //条件满足时执行代码
}

基本语法形式2

if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件不满足时执行代码
}

基本语法形式3 

if(布尔表达式){
    //条件满足时执行代码
}else if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件都不满足时执行代码
}

代码示例1: 判定一个数字是奇数还是偶数

public static void main(String[] args) {
        int num = 10;
        if (num % 2 == 0) {
            System.out.println("num 是偶数");
        } else {
            System.out.println("num 是奇数");
        }
    }

代码示例2: 判定一个数字是正数还是负数

 public static void main(String[] args) {
        int num = 10;
        if (num > 0) {
            System.out.println("num 是正数");
        } else if (num < 0) {
            System.out.println("num 是负数");
        } else {
            System.out.println("num 是 0");
        }
    }

 代码示例3: 判定某一年份是否是闰年

 public static void main(String[] args) {
        int year = 2000;
        if (year % 100 == 0) {
            // 判定世纪闰年
            if (year % 400 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        } else {
            // 普通闰年
            if (year % 4 == 0) {
                System.out.println("是闰年");
            } else {
                System.out.println("不是闰年");
            }
        }
}

悬垂 else 问题

   public static void main(String[] args) {
        int x = 10;
        int y = 10;
        if (x == 10)
            if (y == 10)
                System.out.println("aaa");
            else
                System.out.println("bbb");
    }
//书写代码时,尽量在if和else加括号

 2,switch 语句

基本语法

switch(整数|枚举|字符|字符串){
 case 内容1 : {
 内容满足时执行语句;
 [break;]
 }
 case 内容2 : {
 内容满足时执行语句;
 [break;]
 }
 ...
 default:{
 内容都不满足时执行语句;
 [break;]
 } 
}

代码示例: 根据 day 的值输出星期

  public static void main(String[] args) {
        int day = 1;
        switch(day) {
            case 1:
                System.out.println("星期一");
                break;
            case 2:
                System.out.println("星期二");
                break;
            case 3:
                System.out.println("星期三");
                break;
            case 4:
                System.out.println("星期四");
                break;
            case 5:
                System.out.println("星期五");
                break;
            case 6:
                System.out.println("星期六");
                break;
            case 7:
                System.out.println("星期日");
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }

根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句. 如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句. 我们建议一个 switch 语句最好都要带上 default。

注意事项1 break 不要遗漏, 否则会失去 "多分支选择" 的效果

public static void main(String[] args) {
        int day = 1;
        switch(day) {
            case 1:
                System.out.println("星期一");
                // break;
            case 2:
                System.out.println("星期二");
                break;
        }

    }

 注意事项2 switch 中的值只能是 整数|枚举|字符|字符串

   public static void main(String[] args) {
        double num = 1.0;
        switch(num) {
            case 1.0:
                System.out.println("hehe");
                break;
            case 2.0:
                System.out.println("haha");
                break;
        }
    }

 注意事项3 switch 不能表达复杂的条件

/ 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 
if (num > 10 && num < 20) {
 System.out.println("hehe");
}

三,循环结构

1,while 循环

基本语法格式:

while(循环条件){ 
循环语句; 
}

代码示例1: 打印 1 - 10 的数字

 public static void main(String[] args) {
        int num = 1;
        while (num <= 10) {
            System.out.print(" "+num);
            num++;
        }
    }

 代码示例2: 计算 1 - 100 的和

  public static void main(String[] args) {
        int n = 1;
        int result = 0;
        while (n <= 100) {
            result += n;
            n++;
        }
        System.out.println(result);
    }

代码示例3: 计算 5 的阶乘

  public static void main(String[] args) {
        int n = 1;
        int result = 1;
        while (n <= 5) {
            result *= n;
            n++;
        }
        System.out.println(result);
    }

代码示例4: 计算 1! + 2! + 3! + 4! + 5!

public static void main(String[] args) {
        int num = 1;
        int sum = 0;
       // 外层循环负责求阶乘的和
        while (num <= 5) {
            int factorResult = 1;
            int tmp = 1;
            // 里层循环负责完成求阶乘的细节.
            while (tmp <= num) {
                factorResult *= tmp;
                tmp++;
            }
            sum += factorResult;
            num++;
        }
        System.out.println("sum = " + sum);
    }

注意事项

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }

2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.

int num = 1; 
while (num <= 10); { 
 System.out.println(num); 
 num++; 
} 
// 执行结果
[无任何输出, 程序死循环]

2,break

break 的功能是让循环提前结束。

代码示例: 找到 100 - 200 中第一个 3 的倍数

 public static void main(String[] args) {
        int num = 100;
        while (num <= 200) {
            if (num % 3 == 0) {
                System.out.println("找到了 3 的倍数, 为:" + num);
                break;
            }
            num++;
        }
    }

 3,continue

continue 的功能是跳过这次循环, 立即进入下次循环

代码示例: 找到 100 - 200 中所有3 的倍数

  public static void main(String[] args) {
        int num = 100;
        while (num <= 200) {
            if (num % 3 != 0) {
                num++; // 这里的 ++ 不要忘记! 否则会死循环.
                continue;
            }
            System.out.println("找到了 3 的倍数, 为:" + num);
            num++;
        }
    }

 4,for 循环

基本语法

for(表达式1;表达式2;表达式3){ 
循环体; 
} 

表达式1: 用于初始化循环变量.

表达式2: 循环条件

表达式3: 更新循环变量

代码示例1: 打印 1 - 10 的数字

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

代码示例2: 计算 1 - 100 的和

int sum = 0; 
for (int i = 1; i <= 100; i++) { 
 sum += i; 
} 
System.out.println("sum = " + sum); 
// 执行结果
5050 

代码示例3: 计算 5 的阶乘

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

代码示例4: 计算 1! + 2! + 3! + 4! + 5!

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

注意事项 (和while循环类似)

1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }

2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.

3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.

四,输入输出

1,输出到控制台

基本语法

  public static void main(String[] args) {
        System.out.println("msg"); // 输出一个字符串, 带换行
        System.out.print("msg"); // 输出一个字符串, 不带换行
        System.out.printf("format, msg"); // 格式化输出
    }

println 输出的内容自带 \\n,

print 不带 \\n printf 的格式化输出方式和 C 语言的 printf 是基本一致的

格式化字符串

转换符类型举例

d

十进制整数("%d", 100)100
x十六进制整数("%x", 100)64
f定点浮点数("%f", 100)100.000000
e指数浮点数("%e", 100)1.000000e+02
g通用浮点数("%g", 100)100.000
a十六进制浮点数("%a", 100)0x1.9p6
s字符串("%s", 100)100
c字符("%c", 1)1
b布尔值("%b", 100)true
h散列码("%h", 100)64
o八进制整数("%o", 100)144
%百分号("%.2%%", 2/7f)0.29%

2,从键盘输入

使用 Scanner 读取字符串/整数/浮点数

import java.util.Scanner; // 需要导入 util 包
public class fsfa {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = sc.nextLine();
        System.out.println("请输入你的年龄:");
        int age = sc.nextInt();
        System.out.println("请输入你的工资:");
        float salary = sc.nextFloat();
        System.out.println("你的信息如下:");
        System.out.println("姓名: "+name+"\\n"+"年龄:"+age+"\\n"+"工资:"+salary);
        sc.close(); // 注意, 要记得调用关闭方法
    }
}

使用 Scanner 循环读取 N 个数字

import java.util.Scanner; // 需要导入 util 包
public class fsfa {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double sum = 0.0;
        int num = 0;
        while (sc.hasNextDouble()) {
            double tmp = sc.nextDouble();
            sum += tmp;
            num++;
        }
        System.out.println("sum = " + sum);
        System.out.println("avg = " + sum / num);
        sc.close();
    }
}

五,基础练习

1,年龄分析

根据年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)

  public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        if(n > 0 && n < 18) {
            System.out.println("少年");
        }else if(n >= 18 && n < 29) {
            System.out.println("青年");
        }else if(n >= 29 && n < 56) {
            System.out.println("中年");
        }else {
            System.out.println("老年");
        }
    }

2,判断一个数是否为素数

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (; i < n; i++) {
            if(n % i == 0) {
                System.out.println(n+" 不是素数!");
                break;
            }
        }
        //2种情况
        if( i == n) {
            System.out.println(n + " 是素数!");
        }
    }

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (; i <= n/2; i++) {
            if(n % i == 0) {
                System.out.println(n+" 不是素数!");
                break;
            }
        }
        //2种情况
        if( i > n/2) {
            System.out.println(n + " 是素数!");
        }
    }

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i = 2;
        for (; i <= Math.sqrt(n); i++) {
            if(n % i == 0) {
                System.out.println(n+" 不是素数!");
                break;
            }
        }
        //2种情况
        if( i > Math.sqrt(n)) {
            System.out.println(n + " 是素数!");
        }
    }

3,输出 1000 - 2000 之间所有的闰年

public static void main(String[] args) {
        for (int year = 1000; year < 2000; year++) {
            /*if(year % 100 !=0) {
                if(year % 4 == 0) {
                    System.out.println(year+" 是闰年!");
                }
            }else {
                if(year % 400 == 0) {
                    System.out.println(year+" 是闰年!");
                }
            }*/
            if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0) {
                System.out.println(year+" 是闰年!");
            }
        }
    }

4,输出乘法口诀表

 public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i ; j++) {
                System.out.print(i+"*"+j+"="+i*j+" ");//\\t
            }
            System.out.println();
        }
    }

 5,求两个正整数的最大公约数

public static void main(String[] args) {
        int a = 24;
        int b = 18;
        int c = a%b;//24 % 18 = 6
        while (c != 0) {
            a = b;//a = 18
            b = c;//b = 6
            c = a%b;//0
        }
        System.out.println("最大公约数是"+b);
    }

 6,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。

public static void main(String[] args) {
        double sum = 0.0;
        int flg = 1;
        for (int i = 1; i <= 100 ; i++) {
            sum = sum + 1.0/i * flg;
            flg = -flg;
        }
        System.out.println(sum);
    }

以上是关于03 JavaSE—程序逻辑控制的主要内容,如果未能解决你的问题,请参考以下文章

JavaSE第03篇:Java基础语法之运算符分支结构

Java从入门到天黑|03JavaSE入门之流程控制

#yyds干货盘点#JavaSE系列Java程序的选择与轮回——分支结构与循环结构

⭐️JavaSE系列⭐️Java程序的选择与轮回——分支结构与循环结构

JMeter:逻辑控制器_模块控制器(Module Controller)

Sleep() 方法后的代码片段没有被执行