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

🌸个人主页: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.mzph.cn/bicheng/27645.shtml

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

相关文章

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

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

你能不能手敲出Spring框架?

Spring最成功的地方在于创始人Rod Johnson提出的IOC、AOP核心理念&#xff0c;反而不是其本身的技术。技术上今天可以有Spring春天&#xff0c;明天就可以有Autumn秋天。 核心理念有多重要&#xff1f;就如1871年巴黎公社的失败。公社在对抗法国zf和普鲁士占领军的背景下成立&…

英伟达开源 3400 亿巨兽:98% 合成数据训出最强开源通用模型,性能对标 GPT-4o

NVIDIA 最近开源了其大型语言模型 Nemotron-4 340B&#xff0c;这是一个具有划时代意义的模型&#xff0c;它使用了高达 98% 的合成数据进行训练&#xff0c;并且在性能上与 GPT-4 相当。Nemotron-4 340B 包括基础模型、指令模型和奖励模型&#xff0c;支持 4K 上下文窗口、50 …

回答网友的一个Delphi问题

网友想在grid 中 加一个水印&#xff0c;俺就给他写了个例子。先靠效果&#xff1a; 这个例子 包含下面几步&#xff1a; 1、创建背景 dg_bmp:Tbitmap.Create; w: Image1.Picture.Bitmap.width; h: Image1.Picture.Bitmap.height; dg_bmp.width: w*2; dg_bmp.height: …

从入门到高手的99个python案例(2)

51. 列表和数组比较 - 列表通用&#xff0c;NumPy数组高效。 import numpy as np normal_list [1, 2, 3] np_array np.array([1, 2, 3]) print(np_array.shape) # 输出 (3,), 数组有形状信息 52. Python的内置模块datetime - 处理日期和时间。 from datetime import…

数据库MySQL——从0到1入门教程

Q:为什么需要MySQL&#xff1f; A:网络服务中&#xff0c;我们需要存储、管理大量的数据&#xff0c;并确保数据的安全、实现增删改查操作的高效&#xff0c;因此需要一个系统用来专门管理数据&#xff0c;以实现上述的高性能要求&#xff0c;数据库管理系统应需而生 八股如下…

自动化数据驱动?最全接口自动化测试yaml数据驱动实战

前言 我们在做自动化测试的时候&#xff0c;通常会把配置信息和测试数据存储到特定的文件中&#xff0c;以实现数据和脚本的分离&#xff0c;从而提高代码的易读性和可维护性&#xff0c;便于后期优化。 而配置文件的形式更是多种多样&#xff0c;比如&#xff1a;ini、yaml、…

pdf structuredClone is not defined 解决

问题 部分手机系统的浏览器 pdf v2版本会出现 structuredclone is not defined 的报错&#xff0c;这是因为浏览器过低 解决 查看structuredClone的浏览器兼容性 structuredClone api 文档 polyfill 网站下方有个 polyfill的网址入口 可以解决低版本的兼容问题 相应网址…

笨蛋学算法之LeetCodeHot100_3_最长连续序列(Java)

package com.lsy.leetcodehot100;import java.util.Arrays; import java.util.HashSet; import java.util.Set;public class _Hot3_最长连续序列 {public static int longestConsecutive(int[] nums) {//创建set去重//对重复的数字进行去重Set<Integer> set new HashSet…

融合心血管系统(CVS)多视角信号的新架构新策略

随着深度学习的发展和传感器的广泛采用&#xff0c;自动多视角融合&#xff08;MVF&#xff09;在心血管系统&#xff08;CVS&#xff09;信号处理方面取得了进展。然而&#xff0c;普遍的MVF模型架构通常将同一时间步骤但不同视角的CVS信号混合成统一的表示形式&#xff0c;忽…

redis的四种模式部署应用

这里写目录标题 redis应用redis单机部署redis主从redis哨兵Cluster模式 redis应用 redis单机部署 关闭防火墙[rootzyq ~]#: yum -y install wget make gcc gcc-c ...... [rootzyq ~]#: wget https://download.redis.io/redis-stable.tar.gz --2024-01-01 19:41:14-- https:/…

TypeScript 进阶,深入理解并运用索引访问类型提升代码质量

欢迎回来继续我们的“TypeScript进阶技巧”系列。上次我们深入探讨了如何使用Extract和Exclude实用类型来优化TypeScript的类型处理&#xff08; 《如何利用 TypeScript 的 Extract 提升类型定义与代码清晰度》和 《如何利用 TypeScript 的 Exclude 提升状态管理与代码健壮性》…

论文阅读笔记:Cross-Image Relational Knowledge Distillation for Semantic Segmentation

论文阅读笔记&#xff1a;Cross-Image Relational Knowledge Distillation for Semantic Segmentation 1 背景2 创新点3 方法4 模块4.1 预备知识4.2 跨图像关系知识蒸馏4.3 Memory-based像素到像素蒸馏4.4 Memory-based像素到区域蒸馏4.5 整体框架 5 效果 论文&#xff1a;http…

Redis和Docker

Redis 和 Docker 是两种不同的技术&#xff0c;它们各自解决不同的问题&#xff0c;但有时会一起使用以提供更高效和灵活的解决方案。 Redis 是一个开源的内存数据结构存储系统&#xff0c;可以用作数据库、缓存和消息代理。它设计为解决MySQL等关系型数据库在处理大量读写访问…

MySQL数据操作与查询-T5 MySQL函数

一、数学函数和控制流函数 1、数学函数 &#xff08;1&#xff09;abs(x) 计算x的绝对值。 1 select abs(‐5.5),abs(10) &#xff08;2&#xff09;pow(x,y) 计算x的y次方的值。 1 select pow(2,8),pow(8,2) &#xff08;3&#xff09;round(x) 和 round(x,y) 对数字x进…

php遇到的问题

1、 underfined at line 3 in xxx.php , 错误提示&#xff0c;注释这行代码 // error_reporting(DEBUG ? E_ALL : 0); 目录&#xff1a;config/config.php

Ubuntu20.04部署Qwen2.openvino流程

下载代码 里面包含依赖 git clone https://github.com/OpenVINO-dev-contest/Qwen2.openvino.gitpython环境配置 创建虚拟环境 conda create -name qwen2openvino python3.10 conda activate qwen2openvino安装依赖 pip install wheel setuptools pip install -r requirem…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(二)

第三节 GB/T19001-2016 标准正文 本节为ISO9001:2015 标准条款的正文内容&#xff0c;各条款中的术语参照上节内容理解时&#xff0c;会很轻松。本节不再一一对各条款讲解。 引 言 0.1 总 则 采用质量管理体系是组织的一项战略决策&#xff0c;能够帮助其提高整体绩效…

这个网站有点意思,可做SPRINGBOOT的启动图

在 SpringBoot 项目的 resources 目录下新建一个 banner.txt 文本文件&#xff0c;然后将启动 Banner 粘贴到此文本文件中&#xff0c;启动项目&#xff0c;即可在控制台展示对应的内容信息。 下面这个工具很好用&#xff0c;收藏精哦

PFA 反应罐内衬特氟龙 润滑绝缘行业加工 匠心工艺

PFA反应罐别名也叫反应瓶&#xff0c;储样罐&#xff0c;清洗罐等。可作为样品前处理实验中消解样品和中低压溶样的反应容器&#xff0c;广泛应用于半导体分析、新材料、新能源、同位素分析等。 PFA反应罐规格参考&#xff1a;250ml、300ml、350ml、500ml、1L等。 产品特点&…