初识java(四):程序逻辑控制

目录

[一: 顺序结构](#一: 顺序结构)

[二: 分⽀结构](#二: 分⽀结构)

[1.if 语句](#1.if 语句)

【练习】

[1. 判断⼀个数字是奇数还是偶数](#1. 判断⼀个数字是奇数还是偶数)

[2. 判断⼀个数字是正数,负数,还是零](#2. 判断⼀个数字是正数,负数,还是零)

3.判断⼀个年份是否为闰年

[2.switch 语句](#2.switch 语句)

1.基本语法:

2.执⾏流程:

3.代码⽰例:

[三: 循环结构](#三: 循环结构)

[1.while 循环](#1.while 循环)

1.基本语法格式:

2.代码⽰例:

2.break

代码⽰例:

3.continue

代码⽰例:

[4.for 循环](#4.for 循环)

1.基本语法

2.代码⽰例

5.dowhile循环(不重要)

四:题目


本文章的内容大纲

本文介绍了Java编程中的三种基本控制结构:顺序结构、分支结构和循环结构。

顺序结构按代码书写顺序执行;

分支结构包括if语句(单分支、双分支和多分支)和switch语句(用于多条件匹配);

循环结构涵盖while循环、for循环和do-while循环,并详细说明了break和continue的使用方法。

文章通过多个代码示例演示了各结构的语法和应用场景,同时指出了常见错误(如分号问题、悬垂else等)和最佳实践建议(如代码风格、break必要性)。最后提出了两个编程练习题(素数判断和水仙花数查找)供读者实践。

一: 顺序结构

顺序结构⽐较简单,按照代码书写的顺序⼀⾏⼀⾏执⾏。

看代码:

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

结果:

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

看代码:

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

结果:

二: 分⽀结构

1.if 语句

语法格式1

if( 布尔表达式 ){

// 语句

}

如果布尔表达式结果为true,执⾏if中的语句,否则不执⾏。

⽐如:⼩明,如果这次考试考到90分或以上,给你奖励⼀个鸡腿

看代码:

java 复制代码
  public static void main(String[] args) {
        int score = 92;
        if(score >= 90){
            System.out.println(" 吃个⼤鸡腿 !!!");
        }
    }

结果:

语法格式2

if( 布尔表达式 ){

// 语句 1

}

else{

// 语句 2

}

如果布尔表达式结果为true,则执⾏if中语句,否则执⾏else中语句。

⽐如:⼩明,如果这次考到90分以上,给你奖励⼀个⼤鸡腿,否则奖你⼀个⼤嘴巴⼦。

java 复制代码
    public static void main(String[] args) {
        int score = 92;
        if(score >= 90){
            System.out.println(" 吃个⼤鸡腿 !!!");
        }else{
            System.out.println("此屁呢!!!");
        }
    }

score等于92时候的结果:

语法格式3

if( 布尔表达式 1){

// 语句 1

}else if( 布尔表达式 2){

// 语句 2

}else{

// 语句 3

}

表达式1成⽴,执⾏语句1,否则表达式2成⽴,执⾏语句2,否则执⾏语句3

⽐如:考虑到学⽣⾃尊,不公开分数排名,因此:

1.分数在[90,100]之间的,为优秀

2.分数在[80, 90)之前的,为良好

3.分数在[70, 80)之间的,为中等

4.分数在[60, 70)之间的,为及格

5.分数在[ 0, 60)之间的,为不及格

6.错误数据 按照上述办法通知学⽣成绩。

看代码:

java 复制代码
    public static void main(String[] args) {
        float score=92.5f;
        if(score >= 90){
            System.out.println("优秀 ");
        }else if(score >= 80 && score < 90){
            System.out.println(" 良好 ");
        }else if(score >= 70 && score < 80){
            System.out.println(" 中等 ");
        }else if(score >= 60 && score < 70){
            System.out.println(" 及格 ");
        }else if(score >= 0 && score < 60){
            System.out.println(" 不及格 ");
        }else{
            System.out.println(" 没有对应的分数");
        }
    }

当score等于92.5的时候的结果:

【练习】

1. 判断⼀个数字是奇数还是偶数

看代码:

java 复制代码
    public static void main(String[] args) {
        int n= 8;
        if(n%2==0){
            System.out.println("是偶数");
        }
        else{
            System.out.println("是奇数");
        }
    }

当n等于8的时候结果是:

2. 判断⼀个数字是正数,负数,还是零

看代码:

java 复制代码
    public static void main(String[] args) {
      int n=-5;
      if(n>0){
          System.out.println("正数");
      } else if (n<0) {
          System.out.println("负数");
      }else {
          System.out.println(0);
      }
    }

当n等于-5的时候的结果是:

3.判断⼀个年份是否为闰年

判断闰年的规则:

  • 能被4整除,但不能 被100整除 或者

  • 能被400整除

看代码:

java 复制代码
    public static void main(String[] args) {
        //判断闰年
        int year=2026;
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
            System.out.println("是闰年");
        }else{
            System.out.println("不是闰年");
        }
    }

n是2026的结果:

4.代码⻛格

这里推荐java的写法,不需要像C语言那样写,因为后面的许多代码都是java风格的写法,并没有像C语言那样很标准

虽然两种⽅式都是合法的,但是Java中更推荐使⽤⻛格1,{放在if/else同⼀⾏.代码跟紧凑。

5.分号问题

int x = 20;

if (x == 10) ;

{

System.out.println("hehe");

}

此处if后面多写了⼀个分号,导致分号成为了if语句的语句体,⽽{}中的代码已经成为了和⼀个if⽆关的 代码块.

6.悬垂else问题

看代码:

java 复制代码
    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");
    }

结果是aaa:

原因:

if / else 语句中可以不加⼤括号.但是也可以写语句(只能写⼀条语句).

此时else是和最接近的if匹配. 但是实际开发中我们不建议这么写.最好加上⼤括号.

2.switch 语句

1.基本语法:

switch( 表达式 ){

case 常量值 1:{

//语句 1;

break;

}

case 常量值 2:{

//语句 2;

break;

}

...

default:{

//内容都不满⾜时执⾏语句 ;

break;

}

}

2.执⾏流程:

和C语言差不多

a.先计算表达式的值

b.和case依次⽐较,⼀旦有响应的匹配就执⾏该项下的语句,直到遇到break时结束

c.当表达式的值没有与所列项匹配时,执⾏default

3.代码⽰例:

根据day的值输出星期

看代码

java 复制代码
    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;
        }
    }

当day等于1的时候的结果:

【注意事项】

1.多个case后的常量值不可以重复

2.switch的括号内只能是以下类型的表达式:

3.基本类型:byte、char、short、int,注意不能是long、double类型,会报错的

4.引⽤类型:String常量串、枚举类型

写double情况:

java 复制代码
    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;
        }
    }

结果会报错:

break不要遗漏,否则会失去"多分⽀选择"的效果

注意:这里和C语言有点区别,C语言的break执行的时候是跳出循环,但是这里有点不一样,这里会执行后面的代码,相当于是断句的时候,和跳出循环有点区别

不写break的情况:

java 复制代码
    public static void main(String[] args) {
        int day = 1;
        switch(day) {
            case 1:
                System.out.println(" 星期⼀ ");
                
            case 2:
                System.out.println(" 星期⼆ ");
                break;
        }
    }

结果会出乎意料,后面的都会输出,所以什么不能漏写这个break:

switch不能表达复杂的条件

例如 : 如果 num 的值在 10 到 20 之间 , 就打印 hehe

这样的代码使⽤ if 很容易表达 , 但是使⽤ switch 就⽆法表⽰ .

if (num > 10 && num < 20) {

System.out.println("hehe");

}

switch虽然⽀持嵌套,但是很丑,⼀般不推荐~

看代码:

java 复制代码
int x = 1;
int y = 1;
switch(x) {
case 1:
    switch(y) {
       case 1:
       System.out.println("hehe");
       break;
             }
break;
case 2:
       System.out.println("haha");
       break;
}

综上,我们发现,switch的使⽤局限性是⽐较⼤的

三: 循环结构

1.while 循环

1.基本语法格式:

while( 循环条件 ) {

循环语句 ;

}

循环条件为true,则执⾏循环语句;否则结束循环

2.代码⽰例:

1.打印1-10的数字

看代码:

java 复制代码
    public static void main(String[] args) {
        int num = 1;
        while (num <= 10) {
            System.out.println(num);
            num++;
        }
    }

结果:

2:计算1-100的和

看代码:

java 复制代码
   public static void main(String[] args) {
        //求1-100的和
        int n = 1;
        int result = 0; //记录每一次加的数据总和
        while (n <= 100) {
            result += n;
            n++;
        }
        System.out.println(result);
    }

结果是5050:

3:计算5的阶乘

看代码:

java 复制代码
    public static void main(String[] args) {
        //计算5的阶乘
        int n = 1;
        int result = 1;
        while (n <= 5) {
            result *= n;
            n++;
        }
        System.out.println(result);
    }

结果是120:

4: 计算1!+2!+3!+4!+5!

看代码:

java 复制代码
    public static void main(String[] args) {
        //计算1-5各个阶乘之和
        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);
            }

结果:

这⾥我们发现,当⼀个代码中带有多重循环的时候,代码的复杂程度就⼤⼤提⾼了.⽽⽐较复杂的代码就 更容易出错.

后⾯我们会采⽤更简单的办法来解决这个问题.

注意事项

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

2. 和if类似,while后⾯的{建议和while写在同⼀⾏.

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

看代码:

java 复制代码
    public static void main(String[] args) {
        int num = 1;
        while (num <= 10); {

            System.out.println(num);
            num++;
        }
    }

结果:

此时,while的语句体(这是⼀个空语句),实际的{}部分和循环⽆关.此时循环条件num <= 10,恒成立,导致代码死循环了.

2.break

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

代码⽰例:

找到100-200中第⼀个3的倍数

java 复制代码
    public static void main(String[] args) {
        //找出100-200之间,找出出现的第一个3的倍数的数字
       int num=100;
       while(num<200){
           if(num%3==0){
               System.out.println(num);
               break;
           }
           num++;
       }
    }

结果是102:

执⾏到break就会让循环结束.

3.continue

continue 的功能是跳过这次循环,后面的代码就不执行了,⽴即进⼊下次循环.

代码⽰例:

找到100-200中所有3的倍数

看代码:

java 复制代码
  public static void main(String[] args) {
        //找出100-200所以3的倍数的数字
        int num=100;
        while (num<=200){
            if(num%3!=0){
               num++;
               continue;
            }
            System.out.print(" "+num);
            num++;
        }
    }

结果:

执⾏到continue语句的时候,就会⽴刻进⼊下次循环(判定循环条件),从⽽不会执⾏到下⽅的打印语句

4.for 循环

1.基本语法

for( 表达式 1; 布尔表达式 2; 表达式 3){

表达式 4;

}

• 表达式1:⽤于初始化循环变量初始值设置,在循环最开始时执⾏,且只执⾏⼀次

• 表达式2:循环条件,满则循环继续,否则循环结束

• 表达式3:循环变量更新⽅式

2.代码⽰例

打印1-10的数字

看代码:

java 复制代码
   public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }

结果:

计算1-100的和

看代码:

java 复制代码
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("sum = " + sum);
    }

结果:

计算5的阶乘

看代码:

java 复制代码
    public static void main(String[] args) {
        int result = 1;
        for (int i = 1; i <= 5; i++) {
            result *= i;
        }
        System.out.println("result = " + result);
    }

结果:

计算1!+2!+3!+4!+5!

看代码:

java 复制代码
    public static void main(String[] args) {
        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后⾯不要多写分号,否则可能导致循环不能正确执⾏.

4. 和while循环⼀样,结束单趟循环⽤continue,结束整个循环⽤break

5. 表达式2如果缺失,代表该循环为死循环

5.dowhile循环(不重要)

基本语法

do{

循环语句 ;

}while( 循环条件 );

先执⾏循环语句,再判定循环条件,循环条件成⽴则继续执⾏,否则循环结束。

例如:打印1-10

看代码:

java 复制代码
    public static void main(String[] args) {
        int num = 1;
        do {
            System.out.println(num);
            num++;
        } while (num <= 10);
    }

结果:

注意事项:

1. dowhile循环最后的分号不要忘记

2. ⼀般dowhile很少⽤到,更推荐使⽤for和while

四:题目

  1. 判定⼀个数字是否是素数

  2. 求出0〜999之间的所有"⽔仙花数"并输出。("⽔仙花数"是指⼀个三位数,其各位数字的⽴⽅ 和确好等于该数本⾝,如: 153 = 1^3 + 5^3 + 3^3 ,则153是⼀个"⽔仙花数"。)

以上就是我们的区别内容了,后面的题大家可以自己去写一写!!!!!!!!

相关推荐
jllllyuz1 小时前
VC++ 读写 Excel 文件实现
开发语言·c++·excel
Lucky_ldy1 小时前
C语言学习:字符函数和字符串函数(内容丰富且易懂)
c语言·开发语言·学习
UXbot1 小时前
Vibecoding 工具如何一次性生成 Web + iOS + Android 三端 APP?功能架构深度解读
android·前端·ui·ios·交互·软件构建·ai编程
她说彩礼65万1 小时前
C# WIFI连接状态检测方法
java·spring·c#
小小编程能手1 小时前
C++文件从操作:
开发语言·c++
czxyvX1 小时前
5-Qt系统相关
开发语言·qt
茉莉玫瑰花茶1 小时前
C++ 17 详细特性解析(6)
开发语言·c++
froginwe111 小时前
Bootstrap 标签页
开发语言
_Evan_Yao1 小时前
责任链模式在Agent编排中的应用:让AI Agent学会“踢皮球”
java·人工智能·后端·责任链模式