Java基础教程 - 4 流程控制

news2024/11/24 6:43:32

更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com
更好的阅读体验:点这里 ( www.doubibiji.com

4 流程控制

4.1 分支结构

判断在生活中无处不在,例如我们登录某个系统,需要判断密码是否正确,正确才能登录,否则登录失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1 if-else 语句

在 Java 中通过 if else 来进行条件的判断,格式如下:

if (condition) {
  // condition为true时执行的代码块
} else {
  // condition为false时执行的代码块
}

也可以不需要 else

if (condition) {
    // 条件成立,要做的事情
}

if 后面的条件 condition 需要 boolean 类型的值、变量或表达式,也就是 truefalse

举个栗子,判断一个数是否为偶数:

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

执行结果:

5 是奇数


一般情况下,我们经常通过 关系运算逻辑运算 作为 if 的判断条件。

举个栗子:

public static void main(String[] args) {
  int a = 5;
  if (a > 0 && a < 10)
    System.out.println("a在0~10之间");
}

如果 ifelse 后面只有一条语句,可以省略 {}

2 if-elseif-else 语句

if-else 只能进行是和否的判断。

if-elseif-else 可以进行多条件判断。

语法格式:

if (condition1) {
  // condition1为true时执行的语句块
} else if (condition2) {
  // condition2为true时执行的语句块
} else {
  // 所有条件都为false时执行的语句块
}

else-if 可以有多个,最后的 else 可以省略。

当满足一个条件后,其他的条件就不会再判断了,如果所有条件都不满足,会执行 else


下面通过练习来举个栗子:

给出成绩,经过判断,打印出输入的成绩是优秀、良好、中等、及格还是不及格。

public static void main(String[] args) {
  int score = 85;

  if (score < 0 || score > 100) {
    System.out.println("成绩不正确");
  } else if (score >= 90) {
    System.out.println("优秀");
  } else if (score >= 80) {
    System.out.println("良好");
  } else if (score >= 70) {
    System.out.println("中等");
  } else if (score >= 60) {
    System.out.println("及格");
  } else {
    System.out.println("不及格");
  }
}

上面的输出结果为:良好


重新修改一下程序,读取键盘的输入作为值,这里用到读取键盘输入,需要用到 Scanner 类,所以需要使用 import 进行导入,import 的知识点,后面再讲解。

import java.util.Scanner;

public class HelloJava {
    public static void main(String[] args) {
        // 声明一个Scanner,用于读取键盘的输入
        Scanner scan = new Scanner(System.in);
        // 读取的输入
        int score = scan.nextInt();

        if (score < 0 || score > 100) {
            System.out.println("成绩不正确");
        } else if (score >= 90) {
            System.out.println("优秀");
        } else if (score >= 80) {
            System.out.println("良好");
        } else if (score >= 70) {
            System.out.println("中等");
        } else if (score >= 60) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
}

nextInt() 表示以整形数据的形式读取键盘输入。当程序执行到 scan.nextInt(); 的时候,程序会阻塞在这里,等待用户的输入,输入完成,才会继续执行。


if-else语句都是可以相互嵌套的,可以在 if-else 判断中再进行 if-else 判断。

举个栗子:

public static void main(String[] args) {
    int x = 10;
    int y = 20;

    if (x > 5) {
        if (y > 15) {
            System.out.println("x 大于 5,y 大于 15");
        } else {
            System.out.println("x 大于 5,y 小于等于 15");
        }
    } else {
        if (y > 10) {
            System.out.println("x 小于等于 5,y 大于 10");
        } else {
            System.out.println("x 小于等于 5,y 小于等于 10");
        }
    }
}

3 三目运算符

假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if-else 语句,例如:

public static void main(String[] args) {
    int a = 4;
    int b = 5;

    int max;
    if (a > b)
        max = a;
    else
        max = b;
    System.out.println("最大值为:" + max);		// 最大值为:5
}

我们可以使用三目运算符来完成上面的功能,代码会更简洁的写法:

public static void main(String[] args) {
    int a = 4;
    int b = 5;

    int max = a > b ? a : b;
    System.out.println("最大值为:" + max);		// 最大值为:5
}

int max = a > b ? a : b; 的意思是:先判断 a > b,如果成立,就返回 a,不成立就返回 b

代码简洁了确实很多。能用三目运算符的地方都可以使用 if-else 代替。

4 switch语句

switch语句也是一种判断语句,通常用于对多个可能的值进行比较。switch语句的语法如下:

switch (value) {
  case value1:
    // value == value1 时执行的代码块
    break;
  case value2:
    // value == value2 时执行的代码块
    break;
  default:
    // value 不等于上面所有的case 时执行的代码块
}

注意:switch(value) 中的value,只能是byte、short、char、int、枚举类型(后面再讲)、String类型这六种数据类型

以下是一个示例代码,通过数字判断季节:

public static void main(String[] args) {
    int day = 2;
  
    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;
        default:
            System.out.println("错误的季节");
    }
}

day 满足哪个 case,就会执行哪个 case 后面的代码。

执行结果:

夏季

注意,每个case后,都需要进行 breakreturn,否则会跳到下一个 case

举个栗子:

public static void main(String[] args) {
    int day = 2;
    switch (day) {
        case 1:
            System.out.println("春季");
            break;
        case 2:
            System.out.println("夏季");
        case 3:
            System.out.println("秋季");
        case 4:
            System.out.println("冬季");
            break;
        default:
            System.out.println("错误的季节");
    }
}

因为 case 2 没有 break,所以执行完成,会跳到 case 3 执行,执行完 case 3 没有 breakreturn,会继续跳到 case 4执行,执行完成,case 4break,则跳出。

执行结果:

夏季

秋季

冬季


如果对多个 case 的处理是一样的,就可以将 break 省略。

例如下面的代码中,day 为1,2,3,打印的都是秋季。

public static void main(String[] args) {
    int day = 2;
    switch (day) {
        case 1:
        case 2:
        case 3:
            System.out.println("秋季");
        case 4:
            System.out.println("冬季");
            break;
        default:
            System.out.println("错误的季节");
    }
}

4.2 循环语句

循环在日常生活中也很常见,例如我们要重复做某件事,就需要用到循环,循环不停的做某件事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举个栗子,每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

1 for 循环

for循环是一种常用的循环语句,可以指定循环变量的初始值、终止条件和步长。

for循环的语法如下:

// 对应下面的各个部分
for(①初始化部分; ②循环条件部分; ④迭代部分){
    ③循环体部分;// 执行过程是①-②-③-④-②-③-④-②-③-④......②
// 执行①,然后执行②,判断②是否成立,如果成立,执行③,③执行完成,执行④,④执行完成,再次判断②是否成立,成立继续一轮循环,执行③,②不成立,退出循环。

举个栗子:

public static void main(String[] args) {
  for (int i = 1; i <= 5; i++) {
    System.out.println(i);
  }
}

先执行 int i = 1,定义一个变量 i ,然后执行 i <= 5 ,判断 i 是否小于等于5,如果为 true,则执行循环体中的代码 System.out.println(i); ,执行完循环体中的代码,执行 i++ ,然后再次执行 i <= 5 ,判断i 是否小于等于5,直到 i <= 5 不满足,则终止循环。

打印结果:

1

2

3

4

5

再举个例子:

for (int i = 1, j = 10; i <= 5 && j > 0 ; i++, j--) {
    System.out.println(i + j);
}

从上面可以看出,初始化可以定义多个变量,但是变量的类型要一样。


使用 for 循环也是可以定义死循环的。

什么是死循环,就是一直循环,不会终止的循环。

举个栗子:

下面的循环中,不执行步长的增长,i 始终为1,则 i <= 5 永远成立,所以循环不会终止。

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

还可以这样写:

int i = 0;
for (;;) {
    System.out.println(i++);
}

上面的 for 循环会一直执行,不停的打印 i 的值,i 的值会一直增长。

在实际的开发中,for 循环是用的最多的。

2 while 循环

可以使用 while进行循环操作。

while 循环的语法:

while (condition) {
  // condition为真时执行的代码块
}

代码执行到while,会判断是否满足条件,如果满足,就会进入while循环,执行满足条件要做的事情,执行完成,会重新判断while后面的条件,如果满足会继续循环,如果不满足就不在进入循环。


回到一开始的提问:每天向小红送一条玫瑰花,坚持送100天,这个应该怎么实现呢?

public static void main(String[] args) {
  int i = 1;
  while (i <= 100) {
      System.out.println("第" + i +"天,送你一朵玫瑰花");
      i += 1;
  }
}

首先我们定义了一个变量 i ,用来记录当前是第几天。

我们一开始定义了 i 为 1,执行到 while 循环时,先判断 i 是否小于等于100,如果小于等于100,则进入到循环,打印语句,然后执行 i += 1;i 加1,然后再执行while后面的条件判断,判断 i <= 100,这样一直循环执行,当 i = 101时,刚好已经执行了100次,且不再满足 i < =100,此时终止循环。

注意,一定要对 i 进行累加,如果 i 不进行累加,永远会满足 i <= 100,那么循环将永远不会结束,变成死循环。

执行结果:

第1天,送你一朵玫瑰花

第2天,送你一朵玫瑰花

……

第99天,送你一朵玫瑰花

第100天,送你一朵玫瑰花


我们在计数的时候,i 也可以从0开始,例如:

public static void main(String[] args) {
  int i = 0;
  while (i < 100) {
      System.out.println("第" + (i + 1) + "天,送你一朵玫瑰花");
      i += 1;
  }
}

判断的条件的设定是很灵活的,根据实际需求来就可以了,不是一成不变的。


练习:计算从1累加到100的和

public static void main(String[] args) {
  int sum = 0; 										// 定义一个变量,存储累加的和
  int i = 1; 											// 定义一个变量,标识累加到几了,从1开始累加

  while (i <= 100) {
      sum += i; 										// 将和累加
      i += 1; 											// 将i加1,继续累加
  }

  System.out.println("1~100的和为:" + sum); 		// 打印最终的结果
}

执行结果:

1~100的和为:5050

使用 while 循环的地方都可以使用 for 循环代替。

3 do-while 循环

do...while 循环与 while 循环的区别在于,do...while 循环先执行一次循环体中的代码,再检查条件是否为真。如果条件为真,则继续执行循环体中的代码。

do...while 循环的语法如下:

do {
  // 循环体中的代码块
} while (condition);

举个栗子,再送一遍花:

public static void main(String[] args) {
  
  int i = 1;

  do {
      System.out.println("第" + i + "天,送你一朵玫瑰花");
      i += 1;
  } while (i <= 100);
  
}

4 循环嵌套

循环是可以相互嵌套的,whilefor 循环中可以再次嵌套 whilefor 循环。

例如每天给小红送10多玫瑰花,坚持100天。

public static void main(String[] args) {
  
  int day = 1; // 记录第几天
  while (day <= 100) {			// 外层循环用于循环天数
      for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数

          System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");
      }

      day += 1; // 天数+1
  }
  
}

forwhiledo-while 循环都可以进行多层嵌套。

一般我们使用 for 循环是最多的,要简洁一些:

public static void main(String[] args) {
      for (int day = 1; day < 100; day++) {			// 外层循环用于循环天数
          for (int roseCount = 1; roseCount <= 10; roseCount++) {			// 内层循环用于循环花的朵数
              System.out.println("第" + day + "天,第" + roseCount + "朵玫瑰花");
          }
      }
  }

5 中断循环

我们在前面终止循环,主要是靠不满足条件时自动跳出。这样的话,必须每一次的循环都执行完成,到达条件判断的时候才能跳出。

但是有时候,我们不得不提前退出循环,或者终止当前的循环继续后面的循环,这个时候就需要 breakcontinue 关键字了。


break 语句

break 关键字用于直接结束当前所在的循环。


举个栗子:

如果一个循环,想在执行第三次的时候跳出:

public static void main(String[] args) {
    int i = 0;

    while (i < 10) {
        if (i == 3) {
            break;
        }
        System.out.println("i=" + i);
        i++;
    }
}

执行结果:

i=0
i=1
i=2

可以看到 i = 3 时,跳出了循环。

break只会跳出其所在的循环

public static void main(String[] args) {
    for (int i = 0; i < 10; i++) {
        for (int j = 0; i < 10; j++) {
            if (j == 3) {
                break;
            }

            System.out.println("i=" + i + ", j=" + j);
        }
    }
}

上面的代码,break只能跳出内部的那一个循环。无法跳出外部的循环。

如果就是想跳出外部的循环呢?

那就需要给外部的循环添加一个标签,举个栗子:

public static void main(String[] args) {
    outer : for (int i = 0; i < 10; i++) {
        for (int j = 0; i < 10; j++) {
            if (j == 3) {
                break outer;
            }

            System.out.println("i=" + i + ", j=" + j);
        }
    }
}

上面的代码中,给外层循环添加了一个 outer 标签,标签名称是自定义的;在循环内,可以通过 break 标签 来跳出指定的循环。

可以为每个循环添加标签,如果有多层循环,可以通过这样的方式跳出想要跳出的循环。while 循环也可以添加标签。


continue 语句

continue的作用是中断本次循环,直接进入下一次循环。


举个栗子:

循环5次,在第三次的时候跳过,继续后面的执行:

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        if (i == 3) {
            continue;
        }

        System.out.println("i=" + i);
    }
}

在上面 i == 3 的时候,终止了本次循环,直接跳到 i++ ,继续后面的执行。

执行结果:

i=0
i=1
i=2
i=4

同样,continue 和 break 一样,也可以选择终止的是哪一层的循环。

举个栗子:

public static void main(String[] args) {
    outer : for (int i = 0; i < 10; i++) {
        for (int j = 0; i < 10; j++) {
            if (j == 3) {
                continue outer;
            }

            System.out.println("i=" + i + ", j=" + j);
        }
    }
}

在上面的代码中,给外层循环定义了一个标签,每次执行到 j == 3 ,就会终止本次循环,直接跳转到外层循环的 i++,继续后面的循环。

4.3 练习

随机生成一个1-100的整数,然后在键盘输入数字来猜,猜不对,提示大了还是小了,猜对了,跳出循环。

在这里我们需要生成一个随机数,需要导入一个包 java.util.Random,用来生成 1~100 的随机数;

需要键盘输入,需要导入java.util.Scanner 包。

// 导入包
import java.util.Random;
import java.util.Scanner;

public class HelloJava {
    public static void main(String[] args) {
        Random random = new Random();
        // 随机生成1-100的目标数
        // random.nextInt(100)表示生成0-100的随机数,包括0,不包括100
        // 在[0,100)的基础上+1就是[1,101),1~100
        var goal = random.nextInt(100) + 1;

        while (true) {
            System.out.println("请猜随机数的大小:");	// 打印信息,提示用户输入
            Scanner scan = new Scanner(System.in);
            int value = scan.nextInt();		// 获取键盘输入的数值

            if (value < 1 || value > 100) {
                System.out.println("请输入1-100之间的整数!");
                continue;
            }

            if (value == goal) {
                System.out.println("猜对了!");
                break;		// 如果猜对了,就跳出循环
            } else if (value < goal) {
                System.out.println("猜小了!");
            } else {
                System.out.println("猜大了!");
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1646685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在企业中软件产品测试报告可以运用的场景

在企业应用场景中&#xff0c;测试报告的应用场景十分广泛且重要。以下是几个主要的应用场景&#xff1a; 产品质量评估与保证&#xff1a;测试报告是企业评估软件或产品质量的重要依据。通过测试报告&#xff0c;企业可以了解产品在不同场景下的性能表现、安全性、稳定性以及…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…

Redis的数据类型及使用场景

redis命令大全官网: Commands | Docs (redis.io) 基本介绍 redis起初主要就是为了解决性能问题的&#xff0c;那么redis为什么快? 基于内存操作的&#xff0c;所以操作不需要跟磁盘进行交互&#xff0c;单次的执行会很快 命令执行是单线程 因为基于内存操作 单次执行时间反…

Vue开发者工具Vue.js devtools Vue开发者工具安装步骤前端开发工具免费附带教程

下载地址&#xff1a; 链接: https://pan.baidu.com/s/1JaGvhS4NoD8lL07n2ScE9A 密码: 9rfs 安装步骤&#xff1a; 以谷歌浏览器为例 第一步&#xff1a;打开Chrome的拓展程序 如图 第二步&#xff1a; 将下载好的拓展程序拖入即可&#xff0c;如下图 第三步&#xff1a;…

Python数据清洗与可视化实践:国际旅游收入数据分析

文章目录 概要整体流程名词解释NumPyPandasMatplotlibre 技术细节数据清洗可视化 小结 概要 在本篇博客中&#xff0c;我们将通过一个实际的案例&#xff0c;演示如何使用Python进行数据清洗和可视化&#xff0c;以分析国际旅游收入数据。我们将使用Python中的Pandas库来进行数…

OpenHarmony实战开发-应用侧调用前端页面函数

应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。 在下面的示例中&#xff0c;点击应用侧的“runJavaScript”按钮时&#xff0c;来触发前端页面的htmlTest()方法。 前端页面代码。 <!-- index.html --> <!DOCTYPE html> <html> <…

接口自动化框架篇:Pytest + Allure报告企业定制化实现!

接口自动化框架是现代软件开发中的重要组成部分&#xff0c;能够帮助开发团队提高测试效率和质量。本文将介绍如何使用Pytest作为测试框架&#xff0c;并结合Allure报告进行企业定制化实现。 目标规划 在开始编写接口自动化测试框架之前&#xff0c;我们需要先进行目标规划。…

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

目录 一、BSRN网络总结二、源码包准备三、环境准备3.1 报错KeyError: "No object named BSRN found in arch registry!"3.2 安装basicsr源码包3.3 参考环境 四、数据集准备五、训练5.1 配置文件参数修改5.2 启动训练5.2.1 命令方式训练5.2.2 配置Configuration方式训…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具&#xff0c;支持win7-11。其支持超过100种任务类型&#xff0c;50种定时/条件执行方法&#xff0c;而且任务列表可以随意编辑、排列、移动、更改类型&#xff0c;支持任务执行日志&a…

SEED-X:多模态智能助手

SEED-X&#xff1a;多模态智能助手 SEED-X 是一个多模态智能助手&#xff0c;已经将所有的模型和代码开源了&#xff01;它是一个统一且多用途的多模态基础模型&#xff0c;最新开放了图像编辑模型。 相较于传统的多模态交互框架&#xff0c;SEED-X 具有以下优点&#xff1a;…

【请投票】嘉立创EDA中LED发光二极管是否应有统一的引脚定义?

LED发光二极管的引脚定义应该是唯一的吗&#xff1f; 从下面原理图可以看到&#xff0c;器件型号仅尾缀不同,R代表RED红色发光二极管&#xff0c;W代表WHITE指白色发光二极管&#xff0c;是同一家制造商KENTO&#xff0c; 左侧红色发光二极管的1脚是阴极K&#xff0c;2脚是阳极…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…

初识Linux -- Linux的背景和发展史介绍

点赞关注不迷路&#xff01;&#xff0c;本节涉及初识Linux&#xff0c;主要为背景介绍和xshell登录主机。 1.Linux背景 1.1 发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史。 要说Linux&#xff0c;还得从UNIX说起。 1.2 UNIX发…

【Linux】掌握Linux系统编程中的权限与访问控制

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

博客网站SpringBoot+Vue项目练习

博客网站SpringBootVue简单案例 前言 学了vue后一直没用找到应用的机会&#xff0c;在Github上找到了一个看起来比较友好的项目&#xff08;其实具体代码我还没看过&#xff09;。而且这个项目作者的readme文档写的也算是比较好的了。 项目链接&#xff1a;https://github.c…

Docker入门指南:Docker容器的部署(一)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 当今软件开发领域中&#xff0c;Docker 成为了一种流行的容器化技术。Docker 可以帮助开发者将应用程序及其依赖项打包到一个独立且可移植的容器中&#xf…

AAA、RADIUS、TACACS、Diameter协议介绍

准备软考高级时碰到的一个概念&#xff0c;于是搜集网络资源整理得出此文。 概述 AAA是Authentication、Authorization、Accounting的缩写简称&#xff0c;即认证、授权、记帐。Cisco开发的一个提供网络安全的系统。AAA协议决定哪些用户能够访问服务&#xff0c;以及用户能够…

面试集中营—Spring篇

Spring 框架的好处 1、轻量&#xff1a;spring是轻量的&#xff0c;基本的版本大约2MB&#xff1b; 2、IOC&#xff1a;控制反转&#xff0c;Spring的IOC机制使得对象之间的依赖不再需要我们自己来控制了&#xff0c;而是由容易来控制&#xff0c;一个字&#xff1a;爽&#xf…

【c++】Resharper 去掉中文注释拼写

参考大神&#xff1a; Resharper 去掉注释拼写 reshaper的中文注释一堆下划线&#xff0c;看的很累、很乱&#xff1a; options 里 在code inspetion里 搜索 去掉 Typo in comment 就可以不在中文注释提示 重启vs reshaperd 中文注释下划线没了。小番茄的还在。

数智先锋 | 多场景数据治理案例,释放数据要素生产力

数据作为第五大生产要素&#xff0c;成为释放新质生产力的关键基础。 当前各个行业数字化建设如火如荼&#xff0c;全力挖掘数据价值以驱动行业高质量应用发展。数据治理成为数据要素价值发挥的重要基础和前提。 数据治理不单是技术问题&#xff0c;不是依赖工具就能解决的&a…