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));

}

}

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

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

相关文章

CSS新特性(11)

一.计算盒子宽度calc函数&#xff0c;可以用加减乘除来计算 -*/ 让父盒子永远比子盒子小30像素 二.CSS3过渡transition搭配hover一起使用 该盒子宽度可以从200px到400px,谁做变化给谁加 不仅要写宽还要写高利用逗号&#xff0c;多个属性一起写都用逗号 既想要宽度变又想要高度…

MacOS 配置github密钥

MacOS 配置github密钥 1. 生成GitHub的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxx.com" -f ~/.ssh/id_ed25519_github 其中 xxxxxxxxxxx.com 是注册github、gitee和gitlab的绑定账号的邮箱 -t ed25519:生成密钥的算法为ed25519&#xff08;ed25519比rsa速度快&…

linux cenos redis 单机部署

编译安装redis&#xff08;Centos&#xff09; 编译安装前先安装编译基础环境&#xff1a; yum install -y gcc gcc-c yum install -y readline-devel yum install -y zlib-devel yum -y install pcre yum -y install pcre-devel yum -y install openssl yum -y instal…

TI毫米波雷达(七)——high accurary示例分析(二)

概述 之前分析了IWR6843上的高精度测距程序框架&#xff0c;虽然可以看到大致的系统运行过程&#xff0c;但是总有一种“混乱”的感觉。TI为了展现ARM与DSP协作能力将如此“简单”的一个功能分布在多处理器上&#xff0c;结合BIOS以及semaphore、event、mailbox等机制&#xff…

鸿蒙修饰符

文章目录 一、引言1.1 什么是修饰符1.2 修饰符在鸿蒙开发中的重要性1.3 修饰符的作用机制 二、UI装饰类修饰符2.1 Styles修饰符2.1.1 基本概念和使用场景2.1.2 使用示例2.1.3 最佳实践 2.2 Extend修饰符2.2.1 基本概念2.2.2 使用示例2.2.3 Extend vs Styles 对比2.2.4 使用建议…

架构-微服务-服务配置

文章目录 前言一、配置中心介绍1. 什么是配置中心2. 解决方案 二、Nacos Config入门三、Nacos Config深入1. 配置动态刷新2. 配置共享 四、nacos服务配置的核心概念 前言 服务配置--Nacos Config‌ 微服务架构下关于配置文件的一些问题&#xff1a; 配置文件相对分散。在一个…

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO,VOC,COCO格式标注,4070张图片的数据集

大米中的虫子检测-检测储藏的大米中是否有虫子 支持YOLO&#xff0c;VOC&#xff0c;COCO格式标注&#xff0c;4070张图片的数据集 数据集分割 4070总图像数 训练组 87&#xff05; 3551图片 有效集 9&#xff05; 362图片 测试集 4% 157图片 预处理 自动定向…

Next.js -服务端组件如何渲染

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 服务器组件渲染到客户端发生了什么&#xff1f; 请求到达服务器 用户在浏览器中请求一个页面。 Next.js 服务器接收到这个请求&#xff0c;并根据路由找到相应的页面组件。服务器组件的渲染 Next.js 识别出请求的页面包含…

架构03-事务处理

零、文章目录 架构03-事务处理 1、本地事务实现原子性和持久性 &#xff08;1&#xff09;事务类型 **本地事务&#xff1a;**单个服务、单个数据源**全局事务&#xff1a;**单个服务、多个数据源**共享事务&#xff1a;**多个服务、单个数据源**分布式事务&#xff1a;**多…

基于深度学习的手势识别算法

基于深度学习的手势识别算法 概述算法原理核心逻辑效果演示使用方式参考文献 概述 本文基于论文 [Simple Baselines for Human Pose Estimation and Tracking[1]](ECCV 2018 Open Access Repository (thecvf.com)) 实现手部姿态估计。 手部姿态估计是从图像或视频帧集中找到手…

硬件基础22 反馈放大电路

目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道&#xff0c;电子商务巨头亚马逊&#xff08;AMZN&#xff09;已开发出一种新的生成式人工智能&#xff08;AI&#xff09;&#xff0c;不仅能处理文本&#xff0c;还能处理图片和视频&#xff0c;从而减少对人工智能初创公司Anthropic的依赖…

Spring Boot教程之十二: Spring – RestTemplate

Spring – RestTemplate 由于流量大和快速访问服务&#xff0c;REST API越来越受欢迎。REST 不是一种协议或标准方式&#xff0c;而是一组架构约束。它也被称为 RESTful API 或 Web API。当发出客户端请求时&#xff0c;它只是通过 HTTP 将资源状态的表示传输给请求者或端点。传…

通过 JNI 实现 Java 与 Rust 的 Channel 消息传递

做纯粹的自己。“你要搞清楚自己人生的剧本——不是父母的续集&#xff0c;不是子女的前传&#xff0c;更不是朋友的外篇。对待生命你不妨再大胆一点&#xff0c;因为你好歹要失去它。如果这世上真有奇迹&#xff0c;那只是努力的另一个名字”。 一、crossbeam_channel 参考 cr…

CSS笔记(一)炉石传说卡牌设计1

目标 我要通过html实现一张炉石传说的卡牌设计 问题 其中必须就要考虑到各个元素的摆放&#xff0c;形状的调整来达到满意的效果。通过这个联系来熟悉一下CSS的基本操作。 1️⃣ 基本概念 在CSS里面有行元素&#xff0c;块元素&#xff0c;内联元素&#xff0c;常见的行元…

GAMES101:现代计算机图形学入门-笔记-09

久违的101图形学回归咯 今天的话题应该是比较轻松的&#xff1a;聊一聊在渲染中比较先进的topics Advanced Light Transport 首先是介绍一系列比较先进的光线传播方法&#xff0c;有无偏的如BDPT&#xff08;双向路径追踪&#xff09;&#xff0c;MLT&#xff08;梅特罗波利斯…

Oracle 数据库 IDENTITY 列

IDENTITY列是Oracle数据库12c推出的新特性。之所以叫IDENTITY列&#xff0c;是由于其支持ANSI SQL 关键字 IDENTITY&#xff0c;其内部实现还是使用SEQUENCE。 不过推出这个新语法也是应该的&#xff0c;毕竟MyQL已经有 AUTO_INCREMENT列&#xff0c;而SQL Server也已经有IDENT…

前端学习笔记之文件下载(1.0)

因为要用到这样一个场景&#xff0c;需要下载系统的使用教程&#xff0c;所以在前端项目中就提供了一个能够下载系统教程的一个按钮&#xff0c;供使用者进行下载。 所以就试着写一下这个功能&#xff0c;以一个demo的形式进行演示&#xff0c;在学习的过程中也发现了中文路径…

【阅读记录-章节4】Build a Large Language Model (From Scratch)

文章目录 4. Implementing a GPT model from scratch to generate text4.1 Coding an LLM architecture4.1.1 配置小型 GPT-2 模型4.1.2 DummyGPTModel代码示例4.1.3 准备输入数据并初始化 GPT 模型4.1.4 初始化并运行 GPT 模型 4.2 Normalizing activations with layer normal…