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语句
- if单选择结构:语法结构为 if(布尔表达式){语句块;}。例如在掷骰子小程序中,可以根据点数判断是否获奖。通过生成随机数模拟掷骰子的结果,如果点数满足特定条件,就可以执行相应的操作,如输出“今天手气不错”等。
- if - else双选择结构:语法结构为 if(布尔表达式){语句块1;}else{语句块2;}。如判断圆的面积和周长大小,可以随机产生一个半径,根据半径计算圆的面积和周长,然后通过 if - else 结构判断面积和周长的大小关系,输出相应的结果。
- 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语句
- 常用来对多值进行判断并选择,语法格式为 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语句
- 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("程序运行结束!");。
- 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));
}
}
相关文章:
Java基础之控制语句:开启编程逻辑之门
一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有…...
如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @
在记录HTTP请求的日志中出现了这样的情况: 2024-11-20 11:12:49 INFO network_request gz_login 96 Body: countryAbbrCN&countryCode86&email1222405567%40qq.com&password12354e50456db124f9f34e2789308733&type1 出现这种情况的原因是&#x…...
usb_cam ros包话题说明,image transport包使用
1. /usb_cam/image_raw 类型: sensor_msgs/Image 内容: 摄像头采集的原始图像数据。 用途: 图像处理和分析,例如使用 OpenCV 处理图像。视频流可达10MB/s 图像流查看,例如用 rqt_image_view 进行显示: 2./usb_cam/image_raw/compressed …...
微前端-MicroApp
微前端即是由一个主应用来集成多个微应用(可以不区分技术栈进行集成) 下面是使用微前端框架之一 MicroApp 对 react微应用 的详细流程 第一步 创建主应用my-mj-app 利用脚手架 npx create-react-app my-mj-app 快速创建 安装 npm install --save rea…...
Unity UGUI 垂直循环复用滚动
一 基础类 在unity里面新建这几个类 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 垂直方向滚动 /// </summary> public class CustomScroll:MonoBehaviour {public …...
Spring MVC 深度剖析:优势与劣势全面解读
文章目录 Spring MVC 优势1. **松耦合**2. **易于测试**3. **灵活性**4. **强大的配置机制**5. **异常处理**6. **国际化支持**7. **数据验证**8. **安全性**9. **性能优化** Spring MVC 劣势1. **学习曲线**2. **配置复杂性**3. **性能开销**4. **视图技术限制**5. **社区和支…...
力扣hot100-->前缀和/前缀书/LRU缓存
前缀和 1. 560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2&#…...
Three.js CSS2D/CSS3D渲染器
在Three.js开发过程中,有时需要将 HTML 元素与 Three.js 渲染的 3D 场景相结合,这就需要用到 CSS2DRenderer 和 CSS3DRenderer。本文将详细介绍这两种渲染器的原理及其应用 一、CSS2DRenderer 渲染器 概述 CSS2DRenderer 渲染器用于在 3D 场景中渲染纯…...
mongodb文档字符串批量替换
【mongodb文档字符串批量替换脚本语句】 前言: 1、本方式对于数据量大的情况不适用,执行可能比较慢; 2、数据量大的情况,个人推荐代码层面解决,多线程替换更快: (1)写实体类的方式…...
前端安全和解决方案
提到这个我可能想到的就是不要暴露太多的账号密码信息。一些页面的请求和操作要加上权限。 然后下面就详细的介绍前端可能遇到的安全问题以及解决方法。 首先比较常见的前端的安全性问题就是跨站脚本攻击(XSS)。跨站请求伪造(csrfÿ…...
Tlias智能辅助学习系统-部门管理
包括查询、新增、删除、修改功能 控制层 package com.itheima.controller;import com.itheima.pojo.Dept; import com.itheima.pojo.Result; import com.itheima.service.DeptService; import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.XSlf4j; import org.spr…...
React第十节组件之间传值之context
1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述: 在我们想要每个层级都需要某一属性,或者祖孙之间需要传值时,我们可以使用 props 一层一层的向下传递,或者我们使用更便捷的方案,用 creatC…...
flink中barrier不对齐的原因和影响
Barrier 不对齐(Barrier Misalignment)可能导致一些性能和一致性相关的问题,但 Flink 提供了机制来确保即使在不对齐的情况下,也可以保证数据的一致性。 1. 什么是 Barrier 不对齐? Barrier 不对齐是指在分布式数据流…...
软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养
11月28日凌晨,全球最大财经CNBC报道,软银集团创始人兼CEO孙正义再次向人工智能领域的领军企业OpenAI投资了15亿美元。软银对OpenAI的投资已不是首次。就在上个月,软银已在OpenAI的上一轮融资中注入了5亿美元的资金。但他一直寻求获得OpenAI更…...
麒麟系统x86安装达梦数据库
一、安装准备前工作 操作系统:银河麒麟V10,CPU: x86_64 架构 下载地址,麒麟官网:https://www.kylinos.cn/ 数据库:dm8_20220915_x86_kylin10_64 下载地址,达梦数据库官网:https://…...
Java中的“多态“详解
多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法,从而提高代码的灵活性…...
buuctf-[SUCTF 2019]EasySQL 1解题记录
把你的旗帜给我,我会告诉你这面旗帜是对的。 堆叠注入查询数据库 1; show databases; 查询表名 1; show tables; 获取flag 1;set sql_modepipes_as_concat;select 1...
ASP.NET Core 入门
使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面,然后输入以下命令: dotnet new webapp --output aspne…...
php反序列化1_常见php序列化的CTF考题
声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...
题目 1013: [编程入门]Sn的公式求和
题目 1013: [编程入门]Sn的公式求和 [编程入门]Sn的公式求和 求Snaaaaaa…aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n5时222222222222222,n由键盘输入。 #include<stdio.h> int A(int n)…...
你的串口通信稳定吗?STM32CubeMX配置USART1的避坑指南与稳定性测试
STM32串口通信稳定性实战:从配置陷阱到压力测试全解析 当你的嵌入式设备在实验室运行良好,却在现场频繁出现数据丢失或乱码时,问题往往出在那些容易被忽视的细节上。串口通信作为嵌入式系统中最基础的调试与数据交互接口,其稳定性…...
联想刃7000k BIOS隐藏选项完全解锁指南:一键释放硬件隐藏性能
联想刃7000k BIOS隐藏选项完全解锁指南:一键释放硬件隐藏性能 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 联想刃70…...
RT-DTER最新创新改进系列:(购买资料的粉丝反馈涨点的TOP1模块)我们将BiFPN的加权双向融合之力,注入RT-DETR的端到端Transformer架构,创新与涨点的双丰收!!!!!!
RT-DTER最新创新改进系列:(购买资料的粉丝反馈涨点的TOP1模块)我们将BiFPN的加权双向融合之力,注入RT-DETR的端到端Transformer架构,创新与涨点的双丰收!! 购买相关资料后畅享一对一答疑&#…...
Hotkey Detective:Windows热键冲突终极解决方案与实战指南
Hotkey Detective:Windows热键冲突终极解决方案与实战指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...
告别黑盒:手把手教你用S-Function在Simulink里打造自己的16QAM调制解调模块
从零构建16QAM通信链路:Simulink S-Function深度开发指南 在通信系统仿真领域,现成模块虽然方便,却常常成为深入理解底层原理的障碍。当我们需要验证特定算法、优化系统性能或进行教学演示时,自主构建核心模块的能力显得尤为重要…...
静态页面构建优化:从核心技能到自动化部署实践
1. 项目概述:一个被低估的静态页面技能集 最近在整理自己的前端工具箱时,发现了一个挺有意思的仓库: jieshu666/ShipPage-Skill 。乍一看名字,你可能会觉得这又是一个关于“Ship”(部署)某个“Page”&…...
华为CANN GE动态宽高获取API
aclmdlGetDynamicHW 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Tensor…...
XUnity.AutoTranslator完整指南:让Unity游戏告别语言障碍的终极解决方案
XUnity.AutoTranslator完整指南:让Unity游戏告别语言障碍的终极解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因为语言不通而错过精彩的日本RPG游戏?是否面对欧…...
这下,很多大学老师要睡不着了!
这两年,很多人都在说大学老师“稳定、体面、假期多”,可真把话筒递给高校老师本人,听到的往往不是轻松,而是另一种很闷的疲惫:睡不好,心里总悬着,白天上课,晚上改材料、写本子、赶论…...
RTLSeek:强化学习驱动的Verilog代码多样性生成技术
1. RTLSeek:当强化学习遇上硬件设计自动化在芯片设计领域,Verilog作为主流的硬件描述语言(HDL),其代码质量直接影响着芯片的性能、功耗和面积。传统RTL设计高度依赖工程师经验,一个资深工程师可能需要5-7年才能熟练掌握复杂芯片的…...
