Java基础之控制语句:开启编程逻辑之门

一、Java控制语句概述

  Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。

        选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有多种形式,如 if 单选择结构、if 双选择结构、if 多选择结构和嵌套的 if 结构。switch 语句则用于多值判断,根据变量与一系列值的匹配情况执行相应的代码。

        循环结构用于重复执行一段代码,主要包括 for 循环、while 循环和 do...while 循环。for 循环是计数型循环,通过初始值、结束值和增量来控制循环次数。while 循环是条件型循环,只要给定的条件为真,就会一直执行循环体。do...while 循环与 while 循环相似,但至少会执行一次循环体。

        跳转语句用于实现程序执行流程的有目的转移,主要包括 break 语句、continue 语句和 return 语句。break 语句用于跳出当前的循环或 switch 语句;continue 语句用于跳过当前循环的剩余部分,开始下一次循环迭代;return 语句用于从方法返回一个值,并退出当前方法。

二、选择结构

1. if语句

  1. if单选择结构:语法结构为 if(布尔表达式){语句块;}。例如在掷骰子小程序中,可以根据点数判断是否获奖。通过生成随机数模拟掷骰子的结果,如果点数满足特定条件,就可以执行相应的操作,如输出“今天手气不错”等。
  2. if - else双选择结构:语法结构为 if(布尔表达式){语句块1;}else{语句块2;}。如判断圆的面积和周长大小,可以随机产生一个半径,根据半径计算圆的面积和周长,然后通过 if - else 结构判断面积和周长的大小关系,输出相应的结果。
  3. if - else if - else 多选择结构:可用于多种情况的判断,语法为 if(布尔表达式1){语句块1;}else if(布尔表达式2){语句块2;}……else if(布尔表达式n){语句块n;}else{语句块 n + 1;}。如根据分数输出对应等级,可以生成一个随机数模拟分数,然后通过多个 if - else if - else 结构判断分数所在的区间,输出对应的评级,如“A”“B”“C”“D”等。

2. switch语句

  1. 常用来对多值进行判断并选择,语法格式为 switch(表达式){case 值1:语句块1;[break];case 值2:语句块2;[break];……[default:默认语句;]}。例如根据字符判断是元音、半元音还是辅音,或者根据随机生成的数字判断是星期几等。如以下代码示例:
 

int week = 1;

switch(week){

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("没有此星期");

}

switch 语句还有几个注意点:

(1). case 与 default 之间没有顺序,但是无论 default 与 case 的位置如何。总是先执行第一个 case,与 default 的放置位置没关系。

(2). 穿透:当 case 内没有 break 的时候,程序会继续往下走,会将 case2 的输出语句也执行,将会跳过 case2 的判断语句;直到 break 出现才跳出语句。如下:程序将会输出打印:今天是星期一今天是星期二。

 

case 1:System.out.println(“今天是星期一”);

case 2:System.out.println(“今天是星期二”);break;

(3).当使用的是 char 类型的变量时:需要对 case 中的值加单引号‘ ’。

从 Java 12 开始,switch 语法支持函数式接口和 lambda 表达式,使用“->”方法更加简单,“->”的用法其实只是相当于不用输入 break 就可以跳出判断,保证其只有一条分支可走。示例:

 

int dayOfWeek = 2;

switch (dayOfWeek) {

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("星期六");

default -> System.out.println("星期日");

}

Java 12 之后还可以多条件合并:

 

int dayOfWeek = 2;

switch (dayOfWeek) {

case 1,2,3,4,5 -> System.out.println("工作日");

default -> System.out.println("其他");

}

Java 14 新特性,增加了 yield 用法:

 

int numLetters = switch(seasonName){

case "Spring" ->{System.out.println("spring time");yield 6;}

case "Summer","Winter" -> 6;

case "Fall" -> 4;

default -> -1;

};

示例:

 

int dayOfWeek = 2;

String weekday = switch (dayOfWeek) {

case 1:yield "星期一";

case 2:yield "星期二";

case 3:yield "星期三";

case 4:yield "星期四";

case 5:yield "星期五";

case 6:yield "星期六";

default:yield "星期日";

};

System.out.println(weekday);

三、循环结构

循环结构在 Java 中用于重复执行一段代码,主要包括 while 循环、do-while 循环和 for 循环。

1. while 循环

while 循环是条件型循环,语法结构为while(布尔表达式){循环体;}。只要给定的条件为真,就会一直执行循环体。例如求 1 到 100 的累加和:

 

int result = 0;

int i = 1;

while(i <= 100) {

result += i;

i++;

}

System.out.println(result);

2. do-while 循环

do-while 循环会先执行循环体,再判断布尔表达式的值,至少执行一次。语法结构为do{循环体;}while(布尔表达式);。

 

int i = 100;

do {

System.out.println("Hello world");

i++;

} while(i < 10);

System.out.println("--------");

3. for 循环

for 循环是支持迭代的通用结构,语法格式为for(初始表达式;布尔表达式;迭代因子){循环体;}。

  • 可用于多种场景,如无限循环:
 

for(;;) {

// 循环体

}

  • 打印九九乘法表:
 

for (int i=1;i <= 9;i++){

for (int j=1;j <= i;j++){

System.out.print(j + "*" + i + "=" + (i*j) + "\t");

}

System.out.println();

}

4. 循环的嵌套

在一个循环里面嵌套一个或多个循环,如九九乘法表的实现就是通过循环的嵌套来完成的。外层循环控制行数,内层循环控制列数。

 

for (int i=1;i <= 9;i++){

for (int j=1;j <= i;j++){

System.out.print(j + "*" + i + "=" + (i*j) + "\t");

}

System.out.println();

}

四、跳转语句

1. break和continue语句

  1. break用于强行退出循环,不执行循环中剩余的语句。break语句通常在循环或switch语句中使用,其作用是立即终止当前循环或switch语句块的执行,程序将从循环或switch语句块之后的语句继续执行。例如在嵌套循环中,当满足特定条件时,可以使用带标签的break语句来跳出多层循环。如下代码所示:
 

outer:for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

if (j == 5) {

break outer;

}

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

}

}

System.out.println("程序运行结束!");

在这个例子中,当内层循环的变量j等于5时,使用带标签的break语句跳出了外层循环和内层循环,程序直接执行System.out.println("程序运行结束!");。

  1. continue用于退出本次循环。continue语句只能在循环语句中使用,其作用是结束本次循环,直接进入下一次循环迭代。例如在打印100以内奇数的例子中:
 

for (int i = 1; i <= 100; i++) {

if (i % 2 == 0) {

continue;

}

System.out.println(i);

}

在这个例子中,当变量i是偶数时,使用continue语句跳过当前循环,不执行System.out.println(i);,直接进入下一次循环迭代。带标签的break和continue可以控制嵌套循环的跳转。例如:

 

outer:for (int i = 0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

if (j == 5) {

continue outer;

}

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

}

System.out.println("--- LOOP2END ---");

}

System.out.println("程序运行结束!");

在这个例子中,当内层循环的变量j等于5时,使用带标签的continue语句跳过外层循环的当前迭代,直接进入下一次迭代。

五、语句块和方法

1. 语句块

语句块即用花括号{}括起来的任意数量 Java 语句,它确定了局部变量的作用域。在 Java 中,语句块可以嵌套在另一个语句块中,但不能在嵌套的两个块内声明同名的变量。例如:

 

public class StatementBlockExample {

public static void main(String[] args) {

int n;

{

int k;

}

// k 变量只在内部块中有作用,在这里无法访问。

}

}

2. 方法

方法是一段带名字的语句块,可反复被调用,用于定义该类或该类的实例的行为特征和功能实现。

在 Java 中,方法通常定义在类中,并通过类的实例调用。定义方法的基本语法为:修饰符 返回类型 方法名(参数类型1 参数名1, 参数类型2 参数名2,...) {方法体}。

其中,修饰符指定了该方法访问修饰符,如 public、private、static 等;返回类型指定方法返回的数据类型,如 int、double 等;方法名是指定方法的名字;参数列表指定传入的参数类型和参数名;方法体则是指定该方法要执行的代码。

例如,以下是一个简单的加法方法:

 

public class MethodExample {

public int add(int a, int b) {

int sum = a + b;

return sum;

}

public static void main(String[] args) {

MethodExample example = new MethodExample();

int result = example.add(3, 4);

System.out.println(result);

}

}

方法的调用方式有多种,当方法返回一个值的时候,方法调用通常被当做一个值。如果方法返回值是 void,方法调用一定是一条语句。

方法还可以重载,即在一个类中,有相同的函数名称,但形参不同的函数。方法重载的规则包括方法名称必须相同、参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)、方法的返回类型可以相同也可以不相同,但仅仅返回类型不同不足以成为方法的重载。

例如:

 

public class OverloadExample {

public static int add(int n1, int n2) {

int sum = n1 + n2;

return sum;

}

public static int add(int n1, int n2, int n3) {

int sum = n1 + n2 + n3;

return sum;

}

public static double add(double n1, int n2) {

double sum = n1 + n2;

return sum;

}

public static double add(int n1, double n2) {

double sum = n1 + n2;

return sum;

}

public static void main(String[] args) {

System.out.println(add(3, 5));

System.out.println(add(3, 4, 5));

System.out.println(add(3.05, 5));

System.out.println(add(3, 5.05));

}

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架

一、项目构建环境准备 在构建Vue项目之前&#xff0c;需要搭建Node环境以及Vue-CLI脚手架&#xff0c;由于本篇文章为上一篇文章的补充&#xff0c;也是为了给大家分享更为完整的搭建vue项目方式&#xff0c;所以环境准备部分采用Vue教程&#xff5c;搭建vue项目&#xff5c;V…

shell脚本30个案例(五)

前言&#xff1a; 通过一个多月的shell学习&#xff0c;总共写出30个案例&#xff0c;分批次进行发布&#xff0c;这次总共发布了5个案例&#xff0c;希望能够对大家的学习和使用有所帮助&#xff0c;更多案例会在下期进行发布。 案例二十一、系统内核优化 1.问题&#xff1…

分布式集群下如何做到唯一序列号

优质博文&#xff1a;IT-BLOG-CN 分布式架构下&#xff0c;生成唯一序列号是设计系统常常会遇到的一个问题。例如&#xff0c;数据库使用分库分表的时候&#xff0c;当分成若干个sharding表后&#xff0c;如何能够快速拿到一个唯一序列号&#xff0c;是经常遇到的问题。实现思…

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中&#xff0c;经常会遇到各种压缩的数据&#xff0c;比如zip压缩&#xff0c;比如bzip2压缩&#xff0c;gzip压缩&#xff0c;xz压缩&#xff0c;7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩&#xff0c;解读其本意&#xff0c;本文将探索一…

C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的&#xff1f; 在C中&#xff0c;const关键字的用途和位置非常关键&#xff0c;它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象&#xff0c;并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…

Docker中配置Mysql主从备份

Mysql配置主从备份 一、Docker中实现跨服务器主从备份二、配置步骤1.配置主库2.配置从库3.遇到问题3.其它使用到的命令 一、Docker中实现跨服务器主从备份 在 Docker 中配置 MySQL 主从备份主要通过 MySQL 主从复制实现 二、配置步骤 1.配置主库 # 进入mysql主库容器 docke…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接&#xff1a; 二进制压缩包&#xff08;推荐&#xff09;: ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

C++趣味编程:基于树莓派Pico的模拟沙漏-倾斜开关与LED的互动实现

沙漏,作为一种古老的计时工具,利用重力让沙子通过狭小通道,形成了计时效果。在现代,我们可以通过电子元件模拟沙漏的工作原理。本项目利用树莓派Pico、倾斜开关和LED,实现了一个电子沙漏。以下是项目的详细技术解析与C++代码实现。 一、项目概述 1. 项目目标 通过倾斜开关…

pycharm链接neo4j(导入文件)

1.新建csv文件 2.写入文件 3.运行代码 import csv from py2neo import Graph, Node, Relationship# 连接到Neo4j数据库&#xff0c;使用Bolt协议 graph Graph("bolt://localhost:7687", auth("neo4j", "password"))# 读取CSV文件 with open(…

【C++】多线程

目录 一 概念 1 多线程 2 多进程与多线程 3 多线程理解 二 创建线程 1 thread 2 join() 和 detach() 3 this_thread 三 std::mutex 1 lock 和 unlock 2 lock_guard 3 unique_lock 四 condition_variable 五 std::atomic 一 概念 1 多线程 在C11之前&#xff0…

Kafka 图形化工具 Eagle安装

Kafka 图形化工具 Eagle 3.0.1版本安装 1、安装JDK jdk安装 2、安装kafka 如未安装kafka&#xff0c;需要先安装完kafka 3、下载kafka-eagle 官网下载地址 wget https://github.com/smartloli/kafka-eagle-bin/archive/v3.0.1.tar.gz #移动到安装目录 mv v3.0.1.tar.gz…

vue实现echarts饼图自动轮播

echarts官网&#xff1a;Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…

CSS动画案例6

目录 一、介绍二、静态页面的布局1.HTML部分2.CSS 三、动画交互四、结束语 一、介绍 本节内容我们来仿照一个网站&#xff08;戳我进网站&#xff09;的进入页面时的doing动画部分&#xff0c;首先是大标题从最小变为最大&#xff0c;然后是副标题从下向上走&#xff0c;最后是…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

工作-k8s问题处理篇

前言&#xff1a;公司这边为集团&#xff0c;所以项目较多&#xff0c;我目前总负责的项目架构有十六个&#xff0c;其中还有海外项目&#xff0c;不过底下也有一定的细分&#xff0c;同事解决不了的问题会升级到我这&#xff0c;只k8s容器平台常用的就有三种&#xff0c;一种是…

spring boot3.3.5 logback-spring.xml 配置

新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …

MySQL--SQL优化

目录 1 插入数据 1.1 insert优化 1.1.1 批量插入 1.1.2 手动提交事务 1.1.3 主键顺序插入 1.2 大批量插入数据 2 主键优化 2.1 数据组织方式 2.2 页分裂 2.3 页合并 2.4 主键设计原则 3 order by优化 4 group by优化 1. 使用索引 2. 减少数据集大小 3. 使用合适的聚…

【计算机网络】实验2:总线型以太网的特性

实验 2&#xff1a;总线型以太网的特性 一、 实验目的 加深对MAC地址&#xff0c;IP地址&#xff0c;ARP协议的理解。 了解总线型以太网的特性&#xff08;广播&#xff0c;竞争总线&#xff0c;冲突&#xff09;。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实…

Java函数式编程【二】【Stream的装饰】【中间操作】【map映射器】【摊平映射器flatMap】

一、Java的Stream流式编程中的中间操作 Java的Stream流式编程中&#xff0c;中间操作是对数据流进行处理的一种方式&#xff0c;这些操作通常返回流对象本身&#xff0c;以便可以链接更多的操作。以下是一些常见的中间操作&#xff1a; filter(Predicate predicate) - 用于通过…

使用pymupdf提取PDF文档中的文字和其颜色

最近我在捣鼓一个PDF文件&#xff0c;想把它里面的文字和文字颜色给提取出来。后来发现有个叫pymupdf的库能搞定这事儿。操作起来挺简单的&#xff0c;pymupdf的示例文档里就有现成的代码可以参考。 how-to-extract-text-with-color 我本地的测试代码如下&#xff1a; impor…