当前位置: 首页 > news >正文

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

}

}

相关文章:

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

一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类&#xff0c;它们在程序中起着至关重要的作用&#xff0c;能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径&#xff0c;主要包括 if 语句和 switch 语句。if 语句有…...

如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @

在记录HTTP请求的日志中出现了这样的情况&#xff1a; 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 内容: 摄像头采集的原始图像数据。 用途: 图像处理和分析&#xff0c;例如使用 OpenCV 处理图像。视频流可达10MB/s 图像流查看&#xff0c;例如用 rqt_image_view 进行显示&#xff1a; 2./usb_cam/image_raw/compressed …...

微前端-MicroApp

微前端即是由一个主应用来集成多个微应用&#xff08;可以不区分技术栈进行集成&#xff09; 下面是使用微前端框架之一 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 &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#…...

Three.js CSS2D/CSS3D渲染器

在Three.js开发过程中&#xff0c;有时需要将 HTML 元素与 Three.js 渲染的 3D 场景相结合&#xff0c;这就需要用到 CSS2DRenderer 和 CSS3DRenderer。本文将详细介绍这两种渲染器的原理及其应用 一、CSS2DRenderer 渲染器 概述 CSS2DRenderer 渲染器用于在 3D 场景中渲染纯…...

mongodb文档字符串批量替换

【mongodb文档字符串批量替换脚本语句】 前言&#xff1a; 1、本方式对于数据量大的情况不适用&#xff0c;执行可能比较慢&#xff1b; 2、数据量大的情况&#xff0c;个人推荐代码层面解决&#xff0c;多线程替换更快&#xff1a; &#xff08;1&#xff09;写实体类的方式…...

前端安全和解决方案

提到这个我可能想到的就是不要暴露太多的账号密码信息。一些页面的请求和操作要加上权限。 然后下面就详细的介绍前端可能遇到的安全问题以及解决方法。 首先比较常见的前端的安全性问题就是跨站脚本攻击&#xff08;XSS&#xff09;。跨站请求伪造&#xff08;csrf&#xff…...

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 实现多层级传值 概述&#xff1a; 在我们想要每个层级都需要某一属性&#xff0c;或者祖孙之间需要传值时&#xff0c;我们可以使用 props 一层一层的向下传递&#xff0c;或者我们使用更便捷的方案&#xff0c;用 creatC…...

flink中barrier不对齐的原因和影响

Barrier 不对齐&#xff08;Barrier Misalignment&#xff09;可能导致一些性能和一致性相关的问题&#xff0c;但 Flink 提供了机制来确保即使在不对齐的情况下&#xff0c;也可以保证数据的一致性。 1. 什么是 Barrier 不对齐&#xff1f; Barrier 不对齐是指在分布式数据流…...

软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养

11月28日凌晨&#xff0c;全球最大财经CNBC报道&#xff0c;软银集团创始人兼CEO孙正义再次向人工智能领域的领军企业OpenAI投资了15亿美元。软银对OpenAI的投资已不是首次。就在上个月&#xff0c;软银已在OpenAI的上一轮融资中注入了5亿美元的资金。但他一直寻求获得OpenAI更…...

麒麟系统x86安装达梦数据库

一、安装准备前工作 操作系统&#xff1a;银河麒麟V10&#xff0c;CPU&#xff1a; x86_64 架构 下载地址&#xff0c;麒麟官网&#xff1a;https://www.kylinos.cn/ 数据库&#xff1a;dm8_20220915_x86_kylin10_64 下载地址&#xff0c;达梦数据库官网&#xff1a;https://…...

Java中的“多态“详解

多态&#xff08;Polymorphism&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一个核心概念&#xff0c;它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法&#xff0c;从而提高代码的灵活性…...

buuctf-[SUCTF 2019]EasySQL 1解题记录

把你的旗帜给我&#xff0c;我会告诉你这面旗帜是对的。 堆叠注入查询数据库 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应用项目 打开命令行界面&#xff0c;然后输入以下命令&#xff1a; dotnet new webapp --output aspne…...

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...

题目 1013: [编程入门]Sn的公式求和

题目 1013: [编程入门]Sn的公式求和 [编程入门]Sn的公式求和 求Snaaaaaa…aa…aaa&#xff08;有n个a&#xff09;之值&#xff0c;其中a是一个数字&#xff0c;为2。 例如&#xff0c;n5时222222222222222&#xff0c;n由键盘输入。 #include<stdio.h> int A(int n)…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...