Java基础之循环控制语句、函数、数组

Java基础

1.循环控制语句: break、continue

public static void main(String[] args) {/*TODO 循环控制语句 - break需要和 for 以及 while 循环搭配使用  当在循环中执行了 break语句 那么就可以退出当前循环*/int sum = 0;for (int i = 1; i <= 1000; i++) {sum += i;if (i >= 100) {break;}}System.out.println("sum:" + sum);sum = 0;int num = 1;while (true) {if (num > 100){// 当循环进入if中时,可以退出当前循环break;}sum += num;num += 1;}System.out.println("sum:" + sum);/*TODO 循环控制语句 - continue需要和 for 以及 while 循环搭配使用  当在循环中执行了 continue 语句 那么就可以退出当次循环进入下一次循环*/// 对1~100之间所有的偶数进行求和int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 1) {// 当i的值为奇数时,什么都不做,直接进入下一次循环continue;}sum += i;}System.out.println("sum:" + sum);//拓:/*TODO DEBUG: (Debug使用非常非常重要)通过IDEA的工具,展示程序在运行时,每一步的过程,并对其进行控制用法:① 运行时需要右键选择 Debug 当前代码② 在当前代码的左边控制栏 点击会出现红点 其作用是在Debug运行模式下,程序到该行时会暂停③ 当程序暂停时,可以对程序进行控制step over 表示执行当前代码文件中下一行代码stop into 进入当前方法内stop out 退出当前方法Resume Program 从当前断点继续执行程序,到下一个断点继续暂停程序④ 对于程序运行中可以打断点,使用 Resume Program 跳转到当前断点*//*TODO 双重循环控制语句下 continue 和 Break的使用注意:break 默认每次执行都只能退出一个循环如果要退出多层循环,那么就需要对某一层循环进行标记 格式为:标记信息:for / while 同时 break后加上 标记信息continue和Break的用法一致*/wd:for (int i = 0; i < 5; i++) {for (int j = 0; j <= i ; j++) {System.out.print("*\t");if (i == 3 && j ==2) {break wd;}}System.out.println();}System.out.println("=============");for (int i = 0; i < 5; i++) {for (int j = 0; j <= i ; j++) {if (j == 2) {continue;}System.out.print("*\t");}System.out.println();}}

2.方法/函数

public static void main(String[] args) {/*TODO 方法/函数作用:对于代码中重复出现的代码,进行包装,形成一个方法,在需要方法代码时,直接调用即可格式:修饰符 返回值类型 方法名称(参数列表){方法体(方法执行时的代码)return 值; 如果有返回值的情况下}修饰符: 用于修饰当前方法的访问权限,以及方法的类型  暂时使用 public static返回值类型: 基本数据类型 / 引用类型  如果没有返回值此时需要使用 void 关键字 表示方法名称: 要注意名称定义规则 首个单词首字母小写 其他单词首字母大写 单词间可以直接拼接参数列表: 可以给定多个参数  格式: 参数类型 参数名-> 1.形参  在参数列表中定义的 定义时,没有具体值 用于指代一个变量-> 2.实参  在方法调用时,给方法的参数进行传入值称为实参方法体:  具体的代码,可以直接调用其他方法return: 如果方法没有返回值,可以不需要添加 对于Java来说 return 返回值需要和返回值类型相匹配,每次执行返回一个值TODO   注意:1.方法调用,可以直接使用方法名(参数值)2.方法在传参时,需要类型想对应3.方法与方法是平级关系,不能嵌套定义4.方法调用的时候不用在传递数据类型5.如果方法有明确的返回值,一定要有return带回一个值*/printFun();int funRes = addFun(4, (short) 5);System.out.println("funRes:" + funRes);String str = strAddFun(3, (short) 4);System.out.println(str);int a = 3;short b = 4;String s = strAddFun(a, b);// 方法内不能再定义方法
//        public static int addFun1(int a, short b) {
//            return a + b;
//        }}public static void printFun() {System.out.println("这是一个无参无返回值的函数");}public static int addFun(int a, short b) {return a + b;}public static String strAddFun(int a, short b) {return a + b + "";}

3.方法重载

public static void main(String[] args) {/*TODO 方法重载定义: 将方法名称相同,但是参数列表不同的函数的定义方式,成为方法的重载注意: 方法的重载只和参数列表有关,和返回值无关*/// 将方法的结果作为另外一个方法的参数传入System.out.println(add(3));System.out.println(add(2, 3));}public static int add(int a){return a+a;}public static int add(int a,int b){return a+b;}// 错误 :返回值相同导致
//    public static String add(int a,int b){
//        return a+b+"";
//    }

4.递归

public static void main(String[] args) {/*TODO 方法递归注意:1.方法内部调用自身2.方法递归需要有停止标记  如果没有停止标记那么会出现 栈内存溢出错误 java.lang.StackOverflowError*/System.out.println(reloadFun(5)); // 120/*TODO 递归函数的调用逻辑 以 reloadFun(3)为例reloadFun(3) n =3->  n * reloadFun(n-1); n = 3  (必须先将 n * reloadFun(n-1); 计算完成才能执行return 返回数据 )->  reloadFun(2)->  n * reloadFun(n-1); n = 2->  reloadFun(1)->  return 1;->  reloadFun(2) = n * reloadFun(1) => 2 * 1 = 2-> 3 * reloadFun(2) = 3 * 2 = 6程序执行结束*/reloadFunLong(10);}// 函数的递归调用
public static int reloadFun(int n){System.out.println("接收到N:"+n);// 当n不等于1时调用自身,等于1时返回结果1if (n == 1){return 1;}else {return n * reloadFun(n-1);}
}

5.一维数组

public static void main(String[] args) {/*TODO  Array 数组定义:  将相同类型的数据汇集到一起,形成一个变量 改变成为数组 可以看成是一个容器数组变量的形式为 引用类型,引用类型为空可以使用 null 来进行表示格式1:数据类型[] 数组名;初始化:  ① 数据类型[] 数组名 = new 数据类型[长度]  -> 动态初始化② 数据类型[] 数组名 = new 数据类型[]{元素,元素,元素,...} -> 静态初始化③ 数据类型[] 数组名 = {元素,元素,元素,...} -> 静态初始化格式2:数据类型 数组名[]① 数据类型 数组名[] = new 数据类型[长度]  -> 动态初始化② 数据类型 数组名[] = new 数据类型[]{元素,元素,元素,...} -> 静态初始化③ 数据类型 数组名[] = {元素,元素,元素,...} -> 静态初始化TODO     注意:① 对于变量定义后需要对其进行初始化(赋值)② 对于数组定义后,其长度固定③ 通过数组的下标可以对数组元素进行赋值,同时也可以进行取值,同时下标从0开始④ 对于数组初始化后,对其中每个下标对应位置保存的数据也进行了初始化,使用相对应的默认值进行填充例如 String  ->  null*/// 需求:定义员工姓名  => 姓名元素是一个字符串  => String 类型
//        String[] employName = null;String[] employName = new String[3];employName = new String[4];employName[0] = "李白";employName[1] = "杜甫";employName[2] = "白居易";
//        employName[3] = "李国涛";// 超过长度后出错: java.lang.ArrayIndexOutOfBoundsException  -> 数组越界异常employName[3] = "纳兰性德";System.out.println(employName); // [Ljava.lang.String;@4554617c  => [ 数组  java.lang.String 存储的元素类型 @4554617c 地址System.out.println(employName[0]); // 李白System.out.println(employName[1]); // 杜甫System.out.println(employName[2]); // 白居易System.out.println(employName[3]); // 纳兰性德/*定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。然后给第二个数组赋值,再次输出两个数组的名及元素。TODO 两个变量指向同一个对象地址当对变量进行操作时,实际上就是对其变量保存的内存地址上的对象数据进行操作*/String[] names1 = new String[3];String[] names2 = new String[2];names1[0] = "唐三";names1[1] = "小舞";names2[0] = "大明";// 将 names2 的内存地址赋予给 names2, names2保存的内存地址也存在//此时names2、names2指向内存中的同一块地址,因此当二者无论谁操作都会引起内存中值的变化names1 = names2;System.out.println(names1[0]);//大明names1[1] = "唐三";System.out.println(names2[1]); //唐三}

6.数组的遍历、最值、逆序

public static void main(String[] args) {/*TODO 数组常见操作:1.数组遍历*///      TODO 1.数组遍历int numArr[] = {1, 2, 3, 3, 2, 1, 4, 5, 6};// numArr.length 表示数组的长度for (int i = 0; i < numArr.length; i++) {// 遍历所有的下标,根据下标进行取数据System.out.println("获取到数据:" + numArr[i]);}System.out.println("+++++++++++分割+++++++++++");int index = 0;while (index < numArr.length) {System.out.println("获取到数据:" + numArr[index]);index++;}System.out.println("+++++++++++分割+++++++++++");// TODO 注意: 增强for遍历数据// 每次循环都直接取出 数组中的元素for (int elem : numArr) {System.out.println("获取到数据:" + elem);}/*TODO  数组获取最值(获取数组中的最大值最小值)*/int max = numArr[0];int min = numArr[0];for (int elem : numArr) {max = elem > max ? elem : max;min = elem < min ? elem : min;}System.out.println("max:"+max);System.out.println("min:"+min);/*TODO 数组元素逆序 (就是把元素对调)*/for (int i = 0; i < numArr.length / 2; i++) {int tmpNum = numArr[i];numArr[i] = numArr[numArr.length - i - 1];numArr[numArr.length - i - 1] = tmpNum;}System.out.println("====================分割====================");for (int elem : numArr) {System.out.println("获取到数据:" + elem);}}

7.二维数组

 public static void main(String[] args) {/*TODO 二维数组格式1数据类型[][] 变量名 = new 数据类型[m][n];格式2:数据类型[][] 变量名 = new 数据类型[m][];格式3数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};二维数组 赋值及取值 => 变量名[一维下标][二维下标]*/String[][] allClassStu = new String[30][40];// 当直接使用变量名[] 可以取出一个维度中的数组String[] oneClassStu = allClassStu[1];oneClassStu[0] = "张三";oneClassStu[1] = "李四";System.out.println(oneClassStu[0]);System.out.println(oneClassStu[1]);System.out.println(allClassStu[1][0]);// 对于每个班级的学生人数不一样String[][] allClassStu2 = new String[30][];String[] oneClassStu2 = allClassStu2[29];
//        oneClassStu2[0] = "王五"; // java.lang.NullPointerException => 变量调用的内存地址为null 空
//        System.out.println(allClassStu2[29][0]);/*TODO  NullPointerException 问题由于 new String[30][]; 定义时,对于第二个维度没有定义长度=> 没有进行实例化allClassStu2 变量中 第一个维度中的数组 长度为 30 每个元素 为null*/// TODO 重新创建一个字符串数组 其长度为 22 将其内存地址 赋予给 allClassStu2 变量的第29个下标的位置allClassStu2[29] = new String[22];allClassStu2[29][0] = "邱六";System.out.println(allClassStu2[29][0]);int[][] allInt = {{1, 2, 4}, {2, 3, 4}, {2, 3, 4}};// 双循环遍历二维数组中的所有数据for (int i = 0; i < allInt.length; i++) {for (int index = 0; index < allInt[i].length; index++) {System.out.println(allInt[i][index]);}}int[][] allSalary = {{22, 66, 44}, {77, 33, 88}, {25, 45, 65}, {11, 66, 99}};//增强for循环遍历二维数组int sum = 0;for (int[] oneArr : allSalary) {for (int elem : oneArr) {sum += elem;}}System.out.println("sum:" + sum);}

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

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

相关文章

基于SSM的列车订票管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的列车订票管理系统3拥有两种角色&#xff1b;管理员、用户 管理员&#xff1a;用户管理、车票管理、购票指南管理、系统管理等 用户&#xff1a;发布帖子、登录注册、购票等 1.…

数据结构速成--串

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 …

【Linux冯诺依曼体系结构】

目录 1.冯诺依曼体系结构原理 1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元&#…

最新SpringBoot项目财务管理系统

采用技术 最新SpringBoot项目财务管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 系统登录页面 管理员功能 管理员功能页面 员工管理页面 部…

SpringBoot多数据源(五)

SpringBoot多数据源-集成多个mybatis框架 1.基本框架2.使用2.1项目结构2.2 依赖导入2.3 application.yml配置2.4 创建读与写的SqlSessionFactoryBean 3.总结 1.基本框架 通过启动多个SqlSessionFactoryBean&#xff0c;每个SqlSessionFactoryBean对应一个datasource和指定位置的…

STM32G431RBT6移植FreeRTOS

引言&#xff1a; 本文专门为参加了蓝桥杯嵌入式赛道的同学准备&#xff0c; 大家可能会有这样一个问题&#xff0c; 比完赛之后&#xff0c; 对于像继续使用STM32G431RBT6学习FreeRTOS的&#xff0c; 发现网上的教程使用的板子基本上都是F1和F4的&#xff0c; 其实呢&#xff…

二叉树的最大深度 - LeetCode 热题 37

大家好&#xff01;我是曾续缘&#x1f61b; 今天是《LeetCode 热题 100》系列 发车第 37 天 二叉树第 2 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最…

JAVA面向对象(下 )(一、继承和方法重写)

一、继承 1.1 什么是继承 生活中继承是指&#xff1a; 继承财产>延续财产 继承/遗传 父母的长相&#xff0c;基因 > 延续上一代的基因 继承技能、专业、职位 >延续 继承中华民族的传统文化 > 延续 青出于蓝而胜于蓝 或 长江后浪推前浪&#xff0c;前浪被拍在…

IP xfrm 命令说明2-sp

命令内容: ip xfrm policy {delete | get } {SELECTOR | index INDEX } dir DIR [ ctx CTX ] [ mark MARK [ mask MASK ] ] [ptype PTYPE ]ip xfrm policy {deleteall | list } [ SELECTOR ] [ dir DIR ] [ index INDEX ] [ ptype PTYPE ] [

最高人民法院关于技术调查官参与知识产权案件诉讼活动的若干规定

最高人民法院关于技术调查官参与知识产权案件诉讼活动的若干规定 &#xff08;2019年1月28日最高人民法院审判委员会第1760次会议通过&#xff0c;自2019年5月1日起施行&#xff09; 法释〔2019〕2号 为规范技术调查官参与知识产权案件诉讼活动&#xff0c;根据《中华人民…

【图像分割】光流生成标签(matlab)

文章目录 1. 框架2. opticalFlow_label3. 光流 1. 框架 2. opticalFlow_label close all; clear; clc; % 使用光流进行标签的生成 %% 视频帧的读取 npy_data readNPY(train.npy);%% 提取标签的坐标 first_label squeeze(npy_data(2,1,:,:)); h fspecial("gaussian&quo…

PgSQL之WITH Queries/Statement

PostgreSQL WITH 子句 在 PostgreSQL 中&#xff0c;WITH 子句提供了一种编写辅助语句的方法&#xff0c;以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单&#xff0c;便于阅读。这些语句通常称为通用表表达式&#xff08;Common Table Express…

普通局部变量和静态局部变量区别

存储位置 普通局部变量存储在栈上静态局部变量存储在静态存储区 生命周期 当函数执行完毕时, 普通局部变量会被销毁静态局部变量的生命周期则是整个程序运行期间, 即使函数调用结束, 静态局部变量的值也会被保留 初始化 普通局部变量在每次函数调用时都会被初始化, 他们的…

快速了解开发过程中VO、DTO、BO、 DO、PO、POJO、Entity的概念、区别、作用

​ 目录 ​前言 VO&#xff08;Value Object&#xff0c;值对象&#xff09; DTO&#xff08;Data Transfer Object&#xff0c;数据传输对象&#xff09; BO&#xff08;Business Object&#xff0c;业务对象&#xff09; DO&#xff08;Data Object&#xff0c;数据对象…

OpenCV从入门到精通实战(六)——多目标追踪

基于原生的追踪 使用OpenCV库实现基于视频的对象追踪。通过以下步骤和Python代码&#xff0c;您将能够选择不同的追踪器&#xff0c;并对视频中的对象进行实时追踪。 步骤 1: 导入必要的库 首先&#xff0c;我们需要导入一些必要的Python库&#xff0c;包括argparse、time、…

三级等保安全解决方案——实施方案

实施方案设计 本方案将依照国家有关信息安全建设的一系列法规和政策&#xff0c;为电台建立体系完整、安全功能强健、系统性能优良的网络安全系统。以“统一规划、重点明确、合理建设、逐步强化”为基本指导原则。根据电台网络系统不同信息的重要性调整保护策略&#xff0c;不欠…

深入浅出理解CSS中的3D变换:踏上立体视觉之旅

在现代Web设计中&#xff0c;CSS 3D变换已经成为增强用户体验、打造沉浸式界面的重要手段。借助CSS的3D变换属性&#xff0c;我们可以轻松实现元素在三维空间中的旋转、移动、缩放等操作&#xff0c;从而创造出生动活泼、富有立体感的网页效果。本文将从基础知识出发&#xff0…

SpringBoot项目创建,详细流程

一、前言 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队&#xff08;现为VMware旗下&#xff09;开发&#xff0c;通过提供默认配置和一系列启动器&#xff08;starters&#xff09;来简化项目配置&#xff0c;使得开发者能够快速启动和运行Spring应用程序。 ‍ …

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

一、K8s 部署 elasticsearch-7.14.0 集群 安装规划 组件replicas类型es3StatefulSetkibana1Deployment 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创…

国内首款千亿参数MoE模型APUS-xDAN-4.0:性能逼近GPT-4,可在4090显卡上运行

前言 随着人工智能技术的快速发展&#xff0c;模型参数的数量已成为衡量其复杂性和处理能力的重要指标。近日&#xff0c;国内科技企业APUS与AI创企新旦智能联合宣布&#xff0c;成功开源了国内首个千亿参数的混合专家模型&#xff08;MoE&#xff09;&#xff0c;APUS-xDAN-4…