首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >零基础学Java第四讲---逻辑控制

零基础学Java第四讲---逻辑控制

作者头像
寻星探路
发布2025-12-17 18:49:14
发布2025-12-17 18:49:14
440
举报
文章被收录于专栏:CSDN博客CSDN博客

一、顺序结构

顺序结构相对来说比较简单,按照代码书写的顺序一行一行的执行就可以了。

代码语言:javascript
复制
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");

//运⾏结果 
aaa
bbb
ccc

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

代码语言:javascript
复制
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");

//运⾏结果 
aaa
ccc
bbb

二、分支结构

1、if语句

1.1语法格式1
代码语言:javascript
复制
if(布尔表达式){
     // 语句 
}

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

如:寻星探路,你如果这次期末考试能达到95分以上,暑假就带你去逛动物园!!!

代码语言:javascript
复制
 int score = 96;
 if(score >= 95){
     System.out.println("带你去动物园!!!");
 }
 if(score < 95){
     System.out.println("在家继续修炼!!!");
 }
1.2语法格式2
代码语言:javascript
复制
if(布尔表达式){
     // 语句1 
}else{
     // 语句2 
}

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

如:寻星探路,你如果这次期末考试能达到95分以上,暑假就带你去逛动物园!!!要是考不到,就留在家里,继续修炼去!!!

代码语言:javascript
复制
 int score = 96;
 if(score >= 95){
     System.out.println("带你去动物园!!!");
 }else{
     System.out.println("在家继续修炼!!!");
 }
1.3语法格式3
代码语言:javascript
复制
if(布尔表达式1){
     // 语句1 
}else if(布尔表达式2){
     // 语句2 
}else{
     // 语句3 
}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3

如:寻星探路的家里给他制定了这样的分数奖励机制:

分数在[90,100]之间,算是优秀,奖励去动物园

分数在[80, 90)之间,算是良好,奖励吃顿好的

分数在[70, 80)之间,算是中等,啥事没有

分数在[60, 70)之间,算是及格,奖励一周两套试卷

分数在[ 0 , 60)之间,算是不及格,奖励一顿男女混合双打

代码语言:javascript
复制
 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("数据错误");
 }
1.4代码风格
代码语言:javascript
复制
// ⻛格1 
int x = 10;
if (x == 10) {
    // 语句1 
} else {
    // 语句2 
}

// ------------------------ 推荐⻛格1-------------------- 

// ⻛格2 
int x = 10;
if (x == 10){
    // 语句1 
}
else {
    // 语句2 
}

虽然两种方式都是合法的,但是Java中更推荐使用风格1, { 放在if/else同一行,代码更紧凑。

1.5分号问题
代码语言:javascript
复制
int x = 20;
if (x == 10) ; 
{
    System.out.println("hehe");
}

// 运⾏结果 
hehe

此处多写了⼀个分号,导致分号成为了if语句的语句体,而{}中的代码已经成为了和⼀个if无关的 代码块。

1.6悬垂else问题
代码语言:javascript
复制
int x = 10;
int y = 10;
if (x == 10) 
    if (y == 10)
        System.out.println("aaa");
else 
        System.out.println("bbb");

在上面的代码中,我们并没有加上大括号,这就导致我们可能无法达到想要的结果。

这里我们想要让else与第一个if凑成一对,但愿望是美好的,现实却是else默认和最近的if进行匹配,如果在实际开发中,这就是妥妥的猪队友!!!

在这里建议大家养成加上{}的习惯,哪怕只有一个if,加上{}也不会出现问题!!!

2、switch 语句

2.1基本语法
代码语言:javascript
复制
switch(表达式){
        case 常量值1:{
                语句1;
                [break;]
                }
        case 常量值2:{
                语句2;
                [break;]
                }
        ...
        default:{
                内容都不满⾜时执⾏语句;
                [break;]
                }                
}
2.2执行流程

(1)先计算表达式的值

(2)和case依次比较,⼀旦有响应的匹配就执行该项下的语句,直到遇到break时结束

(3)当表达式的值没有与所列项匹配时,执行default

2.3代码示例

根据day的值输出星期

代码语言:javascript
复制
 int day = 1;
 switch(day) {
    case 1:
        System.out.println("星期⼀");
    case 2:
        System.out.println("星期⼆");
    case 3:
        System.out.println("星期三");
    case 4:
        System.out.println("星期四");
    case 5:
        System.out.println("星期五");
    case 6:        
        System.out.println("星期六");
    case 7:
        System.out.println("星期⽇");
    default:
        System.out.println("输⼊有误");
 }

我们执行这个代码,就会发现,会同时打印所有的时间,从周一打印到周日,这是因为我们的代码中没有写break,有break的情况下,执行到break就会直接跳出,不再继续执行后续的代码啦!!!

#注:

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

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

基本类型:byte、char、short、int,注意不能是long类型

引用类型:String常量串、枚举类型

代码语言:javascript
复制
 //错误代码示例: 
 double num = 1.0;
 switch(num) {
     case 1.0:
         System.out.println("hehe");
         break;
     case 2.0:
         System.out.println("haha");
         break;
 }

(3)switch不能表达复杂的条件

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

(4)switch虽然支持嵌套,但是很丑,一般不推荐~(在这里强调一下,代码不仅仅只有性能等重要,在这个看脸的时代,颜值也很重要!!!)

代码语言:javascript
复制
 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;
 }

三、循环结构

1、while 循环

基本语法格式:

代码语言:javascript
复制
while(循环条件) {
    循环语句;
}

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

(循环条件可以直接用true,表示程序在达到目的之前死循环)

(需要注意的是,Java里面没有所谓的1表示true,0表示false的说法)

代码示例:计算5的阶乘

代码语言:javascript
复制
 int n = 1;
 int result = 1;
 while (n <= 5) {
     result *= n;
     n++;
 }
 System.out.println(num);

前面说switch不建议使用嵌套,但是循环是可以的

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

代码语言:javascript
复制
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后面不要多写分号,否则可能导致循环不能正确执行.

代码语言:javascript
复制
int num = 1;
while (num <= 10); {
    System.out.println(num);
    num++;
}
// 执⾏结果 
[⽆任何输出, 程序死循环]

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

2、break

break 的功能是让循环提前结束(跳出当前循环)

代码语言:javascript
复制
int num = 100;
while (num <= 200) {
    if (num % 3 == 0) {
        System.out.println("找到了3的倍数, 为:" + num);
        break;
    }
    num++;
}

// 执⾏结果 
找到了3的倍数, 为:102

执行到break就会让循环结束

3、continue

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

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

代码语言:javascript
复制
int num = 100;
while (num <= 200) {
    if (num % 3 != 0) {
        num++;  // 这⾥的++不要忘记! 否则会死循环.  
        continue;
    }
    System.out.println("找到了3的倍数, 为:" + num);
    num++;
}

执行到continue语句的时候,就会立刻进入下次循环(判定循环条件),从而不会执行到下方的打印语句。

4、for 循环

基本语法:

代码语言:javascript
复制
for(表达式1;布尔表达式2;表达式3){
    表达式4;
}

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

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

表达式3:循环变量更新方式

执行过程:

表达式1、表达式2、表达式4、表达式3==>表达式2、表达式4、表达式3==>表达式2、表达式4、表达式3==>...

代码示例:计算5的阶乘

代码语言:javascript
复制
 int result = 1;
 for (int i = 1; i <= 5; i++) {
     result *= i;
 }
 System.out.println("result = " + result);

同时,for循环也可以嵌套使用

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

代码语言:javascript
复制
 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);

#注:

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

(2)和if类似,for后面的 { 建议和while写在同⼀行

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

(4)和while循环一样,结束单趟循环用continue,结束整个循环用break

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

5、for-each循环(也被称为增强for循环)

(先记住有这个循环,后续还会强调)

基本语法:

代码语言:javascript
复制
for(元素类型  变量名 : 数组/集合){
    //循环体
}

代码示例:

代码语言:javascript
复制
int [] numders = {1,2,3,4,5};
for(int num : number){
    System.out.println(num);
}

这里使用数组,数组内使用int类型数据。前面定义变量,后面写入集合,这样就可以依次打印集合内的所有元素了!!!

6、do while循环

基本语法:

代码语言:javascript
复制
do{
    循环语句;
}while(循环条件);

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

do while循环可能使用的场景并不是很多,但是它有一个特点,就是至少会执行一次!!!

四、小试牛刀

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

代码语言:javascript
复制
int n = 17;
bollean a = true;
for(int i = 2;i <= n;i++){
    if(n % i == 0){
        a = false;
    }
}
System.out.println(a);

这里可以进行一系列的优化:

(1)众所周知,一个数检测是否是素数,检测到它的根号就可以了

(2)我i们可以直接跳过偶数

代码语言:javascript
复制
int n = 17;
bollean a = true;
for(int i = 3;i <= Math.sqrt(n);i+=2){
    if(n % i == 0){
        a = false;
    }
}
System.out.println(a);

2、水仙花数

求出0〜999之间的所有“水仙花数”并输出。(“水仙花数”是指⼀个三位数,其各位数字的立方和确好等于该数本身,如: 153 = 1^3 + 5^3 + 3^3 ,则153是⼀个“水仙花数”。)

代码语言:javascript
复制
System.out.println("0-999范围内的水仙花数:");        
for (int num = 0; num < 1000; num++) {
    int sum = 0;
    int temp = num;
    int digits = 0;
            
    // 计算数字的位数
    while (temp != 0) {
        temp /= 10;
        digits++;
    }
            
    // 重置temp
    temp = num;
 
    // 计算各位数字的n次方和
    while (temp != 0) {
        int digit = temp % 10;
        sum += Math.pow(digit, digits);
        temp /= 10;
    }
            
    // 判断是否是水仙花数
    if (sum == num) {
        System.out.print(num + " ");
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、顺序结构
  • 二、分支结构
    • 1、if语句
      • 1.1语法格式1
      • 1.2语法格式2
      • 1.3语法格式3
      • 1.4代码风格
      • 1.5分号问题
      • 1.6悬垂else问题
    • 2、switch 语句
      • 2.1基本语法
      • 2.2执行流程
      • 2.3代码示例
  • 三、循环结构
    • 1、while 循环
    • 2、break
    • 3、continue
    • 4、for 循环
    • 5、for-each循环(也被称为增强for循环)
    • 6、do while循环
  • 四、小试牛刀
    • 1、判定⼀个数字是否是素数
    • 2、水仙花数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档