[Java基本语法] 逻辑控制与方法

news2024/11/28 4:04:37

🌸个人主页:https://blog.csdn.net/2301_80050796?spm=1000.2115.3001.5343
🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm=1001.2014.3001.5482
🧀线程与网络(96平均质量分) https://blog.csdn.net/2301_80050796/category_12643370.html?spm=1001.2014.3001.5482
🍭MySql数据库(93平均质量分)https://blog.csdn.net/2301_80050796/category_12629890.html?spm=1001.2014.3001.5482
🍬算法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12676091.html?spm=1001.2014.3001.5482
感谢点赞与关注~~~
在这里插入图片描述
✒️ 今天开始,Java基本语法模块将进行重构.以保证文章质量.

目录

  • 1. 逻辑控制
    • 1.1 顺序结构
    • 1.2 分支结构
      • 1.2.1 if语句
      • 1.2.2 switch语句
    • 1.3 循环结构
      • 1.3.1 while循环
      • 1.3.2 break
      • 1.3.3 continue
      • 1.3.4 for循环
    • 1.4 输入与输出
      • 1.4.1 输出到控制台
      • 1.4.2 从键盘输入
  • 2. 方法的使用
    • 2.1 方法的概念与使用
      • 2.1.1 什么是方法
      • 2.1.2 方法的定义
      • 2.1.3 方法调用的执行过程
      • 2.1.4 实参和形参的关系
    • 2.2 方法的重载
      • 2.2.1 方法重载的概念
      • 2.2.2 方法签名
    • 2.3 递归
      • 2.3.1 递归的概念
      • 2.3.2 递归执行过程分析

1. 逻辑控制

1.1 顺序结构

顺序结构比较简单,按照代码书写一行一行地执行就可以.

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
 
// 运行结果
//aaa
//bbb
//ccc

1.2 分支结构

1.2.1 if语句

  1. 语法格式1
if(布尔表达式){
    // 语句
}

如果布尔表达式结果为true,执行if中的语句,否则不执行.

  1. 语法格式2
if(布尔表达式){
    // 语句1
}else{
    // 语句2
}

如果布尔表达式结果为true,则执行if中语句,否则执行else中语句.

  1. 语法格式
if(布尔表达式1){
    // 语句1
}else if(布尔表达式2){
    // 语句2
}else{
    // 语句3
}

表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3.
[建议] if/else语句下只有一条语句的时候,可以不加花括号,此时的else和最接近的if匹配.但是实际开发中,我们不建议这样写,最好加上大括号.

int x = 10;
int y = 10;
if (x == 10) 
	if (y == 10)
	System.out.println("aaa");
else 
 System.out.println("bbb");//虽然和第3行的if对齐,但是是和第4行的if匹配.

1.2.2 switch语句

  • 基本语法:
switch(表达式){
 case 常量值1:{
	 语句1;
	 [break;]
 }
 case 常量值2:{
	 语句2;
	 [break;]
 }
 ...
	 default:{
	 内容都不满足时执行语句;
	 [break;]
 } 
}
  • 执行流程
  1. 先计算表达式的值
  2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
  3. 当表达式的值没有与所列项匹配时,执行default.
  • 注意事项
    • 多个case后的常量值不可以重复
    • switch的括号内不能是以下类型的数据:float,double,boolean,long.
    • break不要遗漏,否则就会失去多分支选择的效果.

1.3 循环结构

1.3.1 while循环

  • 语法格式
while(循环条件){
	循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环.
[建议]

  • 和if类似,while下面可以不写花括号,但是不写的时候只能支持一条语句,建议还是加上花括号.
  • 和if类似,while后面的{建议和while写在同一行.

1.3.2 break

break 的功能是让循环提前结束.
示例:找到 100 - 200 中第一个 3 的倍数

int num = 100;
while (num <= 200) {
    if (num % 3 == 0) {
        System.out.println("找到了 3 的倍数, 为:" + num);
        break;
   }
    num++;
}

1.3.3 continue

continue 的功能是跳过这次循环, 立即进入下次循环.
示例:找到 100 - 200 中所有 3 的倍数

int num = 100;
while (num <= 200) {
    if (num % 3 != 0) {
        num++; 
        continue;
   }
    System.out.println("找到了 3 的倍数, 为:" + num);
    num++;
}

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句.

1.3.4 for循环

  • 基本语法
for(表达式①;布尔表达式②;表达式③){
	表达式④;
}
  • 表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
  • 表达式2: 循环条件,满则循环继续,否则循环结束
  • 表达式3: 循环变量更新方式
    [注意事项] 和while类似,不再赘述

1.4 输入与输出

1.4.1 输出到控制台

  • 基本语法
System.out.println(msg);            // 输出一个字符串, 带换行
System.out.print(msg);              // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
  1. println 输出的内容自带 \n, print 不带 \n
  2. printf 的格式化输出方式和C 语言的 printf 是基本一致的.

示例:

System.out.println("hello world");
 
int x = 10;
System.out.printf("x = %d\n", x)

1.4.2 从键盘输入

使用 Scanner 读取字符串/整数/浮点数.
举例说明:

import java.util.Scanner;  // 需要导入 util 包
 
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法

解释:

  • 创建一个Scanner类型的对象,使用sc引用.
  • 之后调用sc中的next()系列的方法.
    • next():返回字符串,自动消除有效字符之前的空格,直到结束符.(换行)
    • nextLine():返回字符串,不会自动消除空格,录入所有的字符,直到回车.
    • nextInt():返回十进制整数.
    • nextFloat():返回浮点数.
  • sc实质上是一个流对象的引用,我们在最后需要关闭.

2. 方法的使用

2.1 方法的概念与使用

2.1.1 什么是方法

方法就是一个代码片段. 类似于 C 语言中的 “函数”.

  1. 是能够模块化的组织代码(当代码规模比较复杂的时候).
  2. 做到代码被重复使用, 一份代码可以在多个位置使用.
  3. 让代码更好理解更简单.
  4. 直接调用现有方法开发, 不必重复造轮子.

2.1.2 方法的定义

  • 语法格式
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
	方法体代码;
	[return 返回值];
}

示例:判断一个年份是否是闰年

public class Method{
	    // 方法定义
    public static boolean isLeapYear(int year){
		if((0 == year % 4 && 0 != year % 100) || 0 == year % 400){
		   return true;
		 }else{
		   return false;
		 }
	 }
}

[注意事项]

  1. 修饰符:现阶段直接使用public static 固定搭配
  2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void,注意这里的返回值 和c语言有所不同,这里返回的参数还可以是数组类型.
  3. 方法名字:采用小驼峰命名
  4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
  5. 方法体:方法内部要执行的语句
  6. 在java当中,方法必须写在类当中
  7. 在java当中,方法不能嵌套定义.

2.1.3 方法调用的执行过程

调用方法—>传递参数—>找到方法地址—>执行被调方法的方法体—>被调方法结束返回—>回到主调方法继续往下执行

  • 方法参数传递的注意事项
  1. 匹配参数的个数
  2. 匹配参数的类型
  3. 匹配参数的顺序
  4. 匹配返回值的类型

2.1.4 实参和形参的关系

方法的形参相当于数学函数中的自变量,比如:1 + 2 + 3 + … + n的公式为sum(n) = (1+n)*n/2.
Java中方法的形参就相当于sum函数中的自变量n,用来接收sum函数在调用时传递的值的。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值.

public static int getSum(int N){    // N是形参
    return (1+N)*N / 2;
}
getSum(10);      // 10是实参,在方法调用时,形参N用来保存10
getSum(100);     // 100是实参,在方法调用时,形参N用来保存100

[注意] 在Java中,实参的值永远都是临时拷贝到形参中,形参和实参本质是两个实体.
代码实例:交换两个整形变量.

public class TestMethod {
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		swap(a, b);
		System.out.println("main: a = " + a + " b = " + b);
	}
	
	public static void swap(int x, int y) {
		int tmp = x;
		x = y;
		y = tmp;
		System.out.println("swap: x = " + x + " y = " + y);
	}
}
 
// 运行结果
//swap: x = 20 y = 10
//main: a = 10 b = 20

可以看到,在swap函数交换之后,形参x和y的值发生了改变,但是main方法中a和b还是交换之前的值,即没有交换成功.

  • 原因解释:
    实参a和b是main方法中的两个变量,其空间在main方法的栈(一块特殊的内存空间)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈中,因此:实参a和b 与 形参x和y是两个没有任何关联性的变量,在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x和y操作不会对实参a和b产生任何影响.
    在这里插入图片描述
    [总结] 对于基础类型来说,形参相当于实参的拷贝.即传值调用.
  • 解决办法
    使用引用类型参数.(比如数组)
public class TestMethod {
	public static void main(String[] args) {
	int[] array = {10, 20};
	swap(array);
	System.out.println("array[0] = " + array[0] + " array[1] = " + array[1]);
	}
	
	public static void swap(int[] arr) {
	int tmp = arr[0];
	arr[0] = arr[1];
	arr[1] = tmp;
	}
}
 
// 运行结果
//arr[0] = 20 arr[1] = 10

在这里插入图片描述

2.2 方法的重载

2.2.1 方法重载的概念

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了.
参数列表不同一般指的是:个数,数据类型,或者是顺序不同.
返回值的类型是否一样,不影响方法的重载.即只有方法的名字是一样的,参数列表必须修改,返回值类型可以修改.
举例:下面这几个方法就相互构成重载.

public class TestMethod {
	public static void main(String[] args) {
	add(1, 2);                // 调用add(int, int)
	add(1.5, 2.5);            // 调用add(double, double)
	add(1.5, 2.5, 3.5);       // 调用add(double, double, double)
	}
 
	public static int add(int x, int y) {
	return x + y;
	}
 
	public static double add(double x, double y) {
	return x + y;
	}
	
	public static double add(double x, double y, double z) {
	return x + y + z;
	}
}

2.2.2 方法签名

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可以定义方法名相同的方法呢?
方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字

2.3 递归

2.3.1 递归的概念

从前有坐山,山上有座庙,庙里有个老和尚给小和尚将故事,讲的就是:
"从前有座山,山上有座庙,庙里有个老和尚给小和尚讲故事,讲的就是:
“从前有座山,山上有座庙…”
“从前有座山……”
在这里插入图片描述
上面这个故事有一个特征:自身中又包含了自己.我们从而引出递归的概念.
一个方法在执行过程中调用自身, 就称为 “递归”.
递归的必要条件:

  • 将原问题划分为其子问题.但子问题和原问题的解法相同.
  • 递归结束条件

示例:递归求n的阶乘

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}
 
public static int factor(int n) {
    if (n == 1) {
        return 1;
   }
    return n * factor(n - 1); // factor 调用函数自身
}
 
// 执行结果
//ret = 120

2.3.2 递归执行过程分析

我们还是那上面n的阶乘来说明:

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}
 
public static int factor(int n) {
 System.out.println("函数开始, n = " + n);
    if (n == 1) {
        System.out.println("函数结束, n = 1 ret = 1");
        return 1;
   }
    int ret = n * factor(n - 1);
    System.out.println("函数结束, n = " + n + " ret = " + ret);
    return ret;
}
 
// 执行结果
//函数开始, n = 5
//函数开始, n = 4
//函数开始, n = 3
//函数开始, n = 2
//函数开始, n = 1
//函数结束, n = 1 ret = 1
//函数结束, n = 2 ret = 2
//函数结束, n = 3 ret = 6
//函数结束, n = 4 ret = 24
//函数结束, n = 5 ret = 120
//ret = 120

在这里插入图片描述

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

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

相关文章

Keysight 是德 N9343C 手持式频谱分析仪

Keysight 是德 N9343C 手持式频谱分析仪 主要特性与技术指标 功能 • 1 MHz &#xff5e; 13.6 GHz&#xff08;可调谐至 9 kHz&#xff09; • 内部前置放大器高达 13.6 GHz • 内置 GPS 接收机和 GPS 天线 • 内置跟踪发生器 性能 • -144 dBm 典型的显示平均噪声电平&a…

IT入门知识博客文章大纲第一部分《IT基础知识》(1/10)

目录 IT入门知识博客文章大纲第一部分《IT基础知识》&#xff08;1/10&#xff09; 1.引言 2.第一部分&#xff1a;IT基础知识 2.1 计算机硬件 CPU&#xff1a;计算机的心脏 内存&#xff1a;数据的临时居所 存储设备&#xff1a;数据的长期仓库 输入输出设备&#xff1…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店评论情感分析 酒店价格预测系统 酒店可视化 酒店爬虫 neo4j知识图谱 深度学习

酒店评论爬虫模块主要为如下酒店推荐系统提供酒店、房间、评论采集与情感分析&#xff0c;牛逼系统如下&#xff1a; 创新点10个全程吊打摩擦导师&#xff1a;neo4j知识图谱、预测算法、推荐算法(4种机器学习 深度学习 如协同过滤基于用户、基于物品、神经网络混合CF推荐算法ML…

将ZED获取的视频格式svo转换成其他格式

引言 svo视频格式是ZED的专属格式,实际应用中我们需要将该格式转化成其他可读的文件格式。 1 安装ZED-SDK 双击打开ZED的视频转化执行文件 "C:\Program Files (x86)\ZED SDK\samples\bin\ZED_SVO_Export.exe" 打开如下所示: 根据上述指示执行转换命令,官网也有…

STM32MP135裸机编程:配置RCC,修改主频到1GHz

0 工具准备 STM32CubeMX v6.11.1 STM32CubeIDE v1.15 STM32CubeProgrammer v2.16.0 STM32MP13xx参考手册 STM32MP13勘误手册 STM32MP135AD数据手册 正点原子stm32MP135开发板 1 确认时钟源 本例使用的时钟源均由外部晶振提供&#xff0c;分别是24MHz的HSE、32.768KHz的LSE。原…

数据库第一次实验报告

1. 使用 SQL 语句创建数据库 studentsdb。 2. 使用 SQL 语句选择 studentsdb 为当前使用数据库。 3. 使用 SQL 语句在 studentsdb 数据库创建数据表 student_info、curriculum、grade 4. 使用 SQL 语句 INSERT 向 studentsdb 数据库的 student_info、curriculum、grade 表插…

如何定位检查不到的元素

光标离开输入框时&#xff0c;输入框立刻消失&#xff0c;导致无法查看该元素的html标签属性&#xff0c;如何定位这种元素呢&#xff1f;有两种方法&#xff0c;一种是通过事件监听器&#xff0c;另一种是通过网络接口抓包 1、首先定位到搜索按钮 这个搜索的按钮&#xff0c;当…

统计信号处理基础 习题解答10-14

题目&#xff1a; 观测到数据 其中是已知的&#xff0c;是方差为的WGN&#xff0c;且和独立&#xff0c;求的MMSE估计量以及最小贝叶斯MSE。 解答&#xff1a; 观测到的数据写成矢量形式&#xff1a; 其中&#xff1a; 根据题目条件&#xff0c;符合定理10.3&#xff0c;因此…

oracle安装,导出、导入domp文件、解开oracle行级锁

下载地址&#xff1a; https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html 然后解压&#xff0c;请记住你的解压地址&#xff0c;也就是软件安装地址&#xff0c; 后面还会有一个数据库存储位置&#xff0c;导出的domp文件就是在这里。 然后按照…

基于iBeacon蓝牙定位技术的反向寻车系统

随着城市化进程的加速和汽车保有量的不断增加&#xff0c;大型停车场成为了人们日常生活中不可或缺的一部分。然而&#xff0c;在繁忙的停车场中快速找到自己的车辆&#xff0c;成为了许多车主的难题。为了解决这一问题&#xff0c;维小帮基于iBeacon蓝牙技术打造的反向寻车系统…

Mi-gpt:将小爱音箱接入 ChatGPT ,智能家居 Agent,播放音乐,调节灯光,逗你开心

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; Mi-gpt&#xff1a;将小爱音箱接入 ChatGPT &#xff0c;智能家居 Agent&#xff0c;播放音乐&…

Hvv--知攻善防应急响应靶机--Linux2

HW–应急响应靶机–Linux2 所有靶机均来自 知攻善防实验室 靶机整理&#xff1a; 夸克网盘&#xff1a;https://pan.quark.cn/s/4b6dffd0c51a#/list/share百度云盘&#xff1a;https://pan.baidu.com/s/1NnrS5asrS1Pw6LUbexewuA?pwdtxmy 官方WP&#xff1a;https://mp.weixin.…

Perl 语言学习进阶

一、如何深入 要深入学习Perl语言的库和框架&#xff0c;可以按照以下步骤进行&#xff1a; 了解Perl的核心模块&#xff1a;Perl有许多核心模块&#xff0c;它们提供了许多常用的功能。了解这些模块的功能和用法是深入学习Perl的第一步。一些常用的核心模块包括&#xff1a;S…

Linux--MQTT(一)简介

一、简介 MQTT &#xff08; Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;&#xff0c; 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。 与 HTTP 协议一样&#xff0c; MQTT 协议也是应用层协议&#xff0c;工作在 TCP/IP 四…

在Pycharm使用Github Copilot

文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff…

Linux/Windows 安装 RocketMQ 详细图文教程!

Linux 安装 RocketMQ 首先&#xff0c;你需要从RocketMQ的官方网站或GitHub仓库下载最新的RocketMQ发行版下载安装&#xff0c;官网下载地址&#xff1a;https://rocketmq.apache.org/download/。 接下来配置环境变量&#xff1a; 输入vim /etc/profile命令配置环境变量输入i进…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

PromptMRG: Diagnosis-Driven Prompts for Medical Report Generation

文章汇总 存在的问题 罕见疾病在训练数据中的代表性不足&#xff0c;使其诊断性能不可靠。 解决办法 1&#xff1a;利用预训练的CLIP模型从数据库中检索相似的报告来辅助查询图像的诊断。 2&#xff1a;设计SDL模块根据不同疾病的学习状态自适应调整优化目标。 流程解读 文…

一键解锁创意无界:高效AI生成古典肖像图片,轻松打造艺术化身

在数字化时代&#xff0c;创意与艺术的结合正逐渐改变我们的生活。你是否曾梦想过拥有一幅专属于自己的古典肖像画&#xff0c;却又苦于找不到合适的画师或高昂的费用而望而却步&#xff1f;现在&#xff0c;这一切都将成为现实&#xff01; 进入首助编辑高手的AI魔法智绘图板块…

面试官:你公司是怎么做日志收集处理的?

引言&#xff1a;在现代的软件开发和运维中&#xff0c;日志管理是至关重要的一环。面试官可能会问到如何处理日志收集与分析&#xff0c;特别是在微服务架构中如何有效地管理日志数据。本文将介绍一种常见且广泛应用的解决方案&#xff1a;ELK Stack。 题目 面试官&#xff…