学习JavaEE的日子 day10 一维数组的深入,二维数组

news2024/9/28 9:28:08

day10

1.eclipse的使用

Eclipse是一款功能强大的集成开发环境(IDE),主要用于开发Java应用程序。

1.项目(Project):项目是为满足特定需求而创建的代码文件集合。一个工作区可以包含多个项目,而您的代码必须归属于某个项目,不能单独存在。

2.创建Java文件:在Eclipse中创建Java文件非常简单。您可以按照以下步骤进行操作:

  • 在Eclipse的导航菜单中选择“File(文件)”>“New(新建)”>“Java Project(Java项目)”。

  • 输入项目名称并点击“Finish(完成)”。

  • 在项目上右键单击,选择“New(新建)”>“Class(类)”。

  • 输入类名和包名,并选择所需的选项。

    ​ 包名字:com.xxx.xxx

  • 点击“Finish(完成)”即可创建Java文件。

在这里插入图片描述

在这里插入图片描述

注意:补全代码:alt+/

2.一维数组的深入

2.1 数组的排序 – 冒泡排序

口诀:

  • 	N个数字来排序
    
  •    两两相比小靠前
    
  •    外层循环N-1
    
  •    内层循环N-1-i
    
public static void main(String[] args) {
	
		int[] arr = {18,32,81,63,20,9};
	
		for(int i = 0;i<arr.length-1;i++){
			for (int j = 0; j < arr.length-1-i; j++) {
				if(arr[j] > arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		
		for (int element : arr) {
			System.out.print(element + " ");
		}
	}

更多排序见《java十大经典排序》

2.2 数组的查找 – 线性查找

public static void main(String[] args) {
		
		int[] arr = {18,32,81,63,20,9};
		
		int num = 81;//需要查找的元素
		
		for (int i = 0; i < arr.length; i++) {
			if(num == arr[i]){
				System.out.println("找到该元素了,下标为:" + i);
				break;
			}
		}
		
	}
 * 知识点:
 * 
 * 

2.3 数组的查找 – 二分法查找

前提:必须先排序,再二分法查找!!!!

public static void main(String[] args) {
		
		int[] arr = {18,32,81,63,20,9};
		
		//排序 -- 9,18,20,32,63,81
		Arrays.sort(arr);
		
		int num = 81;//需要查找的元素
		
		int start = 0;
		int end = arr.length-1;
		
		while(start <= end){
			int mid = (start + end)/2;
			
			if(num > arr[mid]){
				start = mid+1;
			}else if(num < arr[mid]){
				end = mid-1;
			}else{
				System.out.println("找到该元素了,下标为:" + mid);
				break;
			}
		}

2.4 数组的复制

2.4.1 数组的复制1

注意:以下方法,复制后,改变源数组,新数组里的数据也会发生改变

public static void main(String[] args) {
    //源数组
	String[] names = {"麻生希","椎名空","水菜丽","朝桐光"};
	
	//新数组
	String[] newNames = names;
	
	//改变源数组的数据
	names[1] = "杨健平";
	
	//遍历新数组
	for (String element : newNames) {
		System.out.println(element);
	}
	
}

在这里插入图片描述

2.4.2 数组的复制2
public static void main(String[] args) {
	//源数组
	String[] names = {"麻生希","椎名空","水菜丽","朝桐光"};
	
	//新数组
	String[] newNames = new String[names.length];
	
	//遍历源数组,将元素赋值给新数组
	for (int i = 0; i < names.length; i++) {
		newNames[i] = names[i];
	}
	
	//改变源数组的数据
	names[1] = "杨健平";
	
	//遍历新数组
	for (String element : newNames) {
		System.out.println(element);
	}
	
}

在这里插入图片描述

2.5 数组的扩容

需求:扩容后的长度是原来的1.5倍

public static void main(String[] args) {
    //源数组
	String[] names = {"麻生希","椎名空","水菜丽","朝桐光"};
	
	//获取数组长度
	int oldCapacity = names.length;
	//计算新的长度
	int newCapacity = oldCapacity + (oldCapacity>>1);
	
	//新数组 - [null,null,null,null,null,null]
	String[] newNames = new String[newCapacity];
	
	//遍历源数组,将数据赋值给新数组
	for (int i = 0; i < names.length; i++) {
		newNames[i] = names[i];
	}
	
	//将新数组的地址赋值给源数组
	names = newNames;
	
	//遍历源数组
	for (String element : names) {
		System.out.println(element);
	}
	
}

在这里插入图片描述

2.6 数组的删除

2.6.1 数组的删除1

缺点:这种方式的删除数组,会让数组的空间越变越小。数组是用来存储数据的,越变越小会使得存储数据不方便

public static void main(String[] args) {
		
		//源数组
		String[] names = {"麻生希","椎名空","水菜丽","朝桐光"};
		
		//新数组
		String[] newNames = new String[names.length-1];
		
		//遍历源数组,将"椎名空"以外的元素赋值到新数组中
		int index = 0;
		for (String element : names) {
			if(!element.equals("椎名空")){
				newNames[index] = element;
				index++;
			}
		}
		
		//将新数组的引用赋值给源数组
		names = newNames;
		
		//遍历源数组
		for (String element : names) {
			System.out.println(element);
		}
	}

在这里插入图片描述

2.6.2 数组的删除2
public static void main(String[] args) {
		
		//源数组
		String[] names = {"麻生希","椎名空","水菜丽","朝桐光"};
		
		//元素的迁移
		for (int i = 1; i < names.length-1; i++) {
			names[i] = names[i+1];
		}
		
		//将最后一个元素赋为null
		names[names.length-1] = null;
		
		//遍历源数组
		for (String element : names) {
			System.out.println(element);
		}
	}

在这里插入图片描述

2.7 数组作为方法的参数和返回值

需求:设计一个方法,传入int类型的数组,返回最大值和最小值

public static void main(String[] args) {
		
		int[] arr = {18,32,81,63,20,9};
		
		int[] maxAndMin = getMaxAndMin(arr);
		System.out.println("最大值为:" + maxAndMin[0]);
		System.out.println("最小值为:" + maxAndMin[1]);
	}
	
	public static int[] getMaxAndMin(int[] arr){
		
		int max = arr[0];
		int min = arr[0];
		
		for (int i = 1; i < arr.length; i++) {
			if(max < arr[i]){
				max = arr[i];
			}
			if(min > arr[i]){
				min = arr[i];
			}
		}
		
		return new int[]{max,min};
	}
}

小结:

方法的返回值只能有一个

如果想返回多个数据,就可以将多个数据存入一个数组中

2.8 可变参数

需求:设计一个方法,传入n个int值,获取最大值并返回

public static void main(String[] args) {
		
		int max = getMax(1,2,3,4,10,5,6,7,8,9,0);//实参作为元素压入到数组中
		System.out.println("最大值为:" + max);
	}
	
	//int... arr 就是数组
	public static int getMax(int... arr){
		int max = arr[0];
		for(int i = 1; i < arr.length; i++) {
			if(max < arr[i]){
				max = arr[i];
			}
		}
		return max;
	}
	
	//可变参数后不能添加其他参数
	public static void method(String str,int... arr){}
} //错误的

小结:

1.可变参数就是数组

2.实参就是数组里的元素

3.可变参数后不能添加其他参数

2.9 地址值

int[] arr = {1,2,3,4,5};

System.out.println(arr);//[I@6d03e736

double[] arr2 = {1.1,2.2,3.3};

System.out.println(arr2);//[D@568db2f2

打印数组的时候,实际出现的是数组的地址值。

数组的地址值:就表示数组在内存中的位置。

以[I@6d03e736为例:

6d03e736:就是数组在内存中真正的地址值。(十六进制的)

2.10 数组常见问题

空指针异常(NullPointerException)

数组越界异常(ArrayIndexOutOfBoundsException)
当访问了数组中不存在的索引,就会引发索引越界异常。
避免:
针对于任意一个数组,索引的范围:
最小索引:0
最大索引:数组的长度 - 1
数组名.length - 1

2.11 Arrays工具类

概念:Arrays是Java给我们提供的专门操作数组的工具类

理解:

1.工具类 - 该类中所有的方法都是静态的,直接使用类名调用

2.API - Java提供类的使用说明书

public static void main(String[] args) {
		
		int[] arr = {18,32,81,63,20,9};
		
		//排序 - [9, 18, 20, 32, 63, 81]
		Arrays.sort(arr);
		
		//查找(底层还用二分法去查找元素,所以必须先排序,再查找!)
		//返回值规则:如果搜索的元素包含在数组中就返回元素的下标; 否则,返回(-插入点-1)
		int index = Arrays.binarySearch(arr, 28);
		System.out.println("查找元素的下标为:" + index);
		
		//拷贝数组(目标数组,新的长度)- [9, 18, 20, 32, 63, 81, 0, 0, 0, 0]
		int[] copyOf = Arrays.copyOf(arr, 10);
		
		//拷贝区间数组(目标数组,开始下标-包含,结束下标-排他)- [18, 20, 32, 63, 81, 0, 0]
		int[] copyOfRange = Arrays.copyOfRange(copyOf, 1, 8);
		
		//替换元素 - [666, 666, 666, 666, 666, 666, 666]
		Arrays.fill(copyOfRange, 666);
		
		//替换区间元素(目标数组,开始下标-包含,结束下标-排他,替换的值) - [666, 666, 888, 888, 888, 666, 666]
		Arrays.fill(copyOfRange, 2, 5, 888);
		
		//将数组转换为字符串
		String str = Arrays.toString(copyOfRange);
		System.out.println(str);
	}

3.二维数组

理解:二维数组中包含了多个一维数组

概念:
1.数组是引用数据类型
2.数组中的元素在内存中是连续的
3.数组中的数据称之为元素
4.每个元素都有编号称之为下标
5.下标从0开始
6.数组一旦初始化成功,长度不可改变

数组的声明:数据类型[][] 数组名;

数组的初始化:

​ 静态初始化:程序员指定元素,长度由系统自动分配

​ 动态初始化:

public static void main(String[] args) {
		
		//静态初始化一:
		//String[][] names = new String[][]{{"麻生希","椎名空","水菜丽"},{"爱田奈奈","古川伊织","水野朝阳","铃原爱蜜莉","桃谷绘里香"}};
		
		//静态初始化二:先声明,再初始化
		//String[][] names;
		//names = new String[][]{{"麻生希","椎名空","水菜丽"},{"爱田奈奈","古川伊织","水野朝阳","铃原爱蜜莉","桃谷绘里香"}};
		
		//静态初始化三:简写第一种写法
		String[][] names = {{"麻生希","椎名空","水菜丽"},{"爱田奈奈","古川伊织","水野朝阳","铃原爱蜜莉","桃谷绘里香"}};
		
		//通过下标设置元素
		names[1][2] = "巴得伟";
		
		//通过下标获取元素
		String str = names[1][2];
		System.out.println("通过下标获取元素:" + str);
		
		//获取长度
		System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
		System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
		System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//5
		
		//遍历二维数组
		//思路:先循环获取二维数组中的一维数组,再循环获取一维数组中的元素
		
		//遍历 -- for循环
		for (int i = 0; i < names.length; i++) {
			for (int j = 0; j < names[i].length; j++) {
				System.out.println(names[i][j]);
			}
		}
		System.out.println("--------------------");
		
		//遍历 -- foreach/增强for循环
		for (String[] ss : names) {
			for (String element : ss) {
				System.out.println(element);
			}
		}
		
	}

动态初始化:程序员指定长度,由系统自动分配元素
整数类型:0
浮点类型:0.0
字符类型:’ ’
布尔类型:false
引用类型:null

public static void main(String[] args) {
		
		//动态初始化一:
		//String[][] names = new String[2][3];//2表示2个一维数组,2表示每个一维数组有3个元素
		
		//动态初始化二:先声明,再初始化
		String[][] names;
		names = new String[2][3];//2表示2个一维数组,2表示每个一维数组有3个元素
		
		//通过下标设置元素
		names[0][0] = "巴得伟1";
		names[0][1] = "巴得伟2";
		names[0][2] = "巴得伟3";
		names[1][0] = "巴得伟4";
		names[1][1] = "巴得伟5";
		names[1][2] = "巴得伟6";
		
		//通过下标获取元素
		String str = names[1][2];
		System.out.println("通过下标获取元素:" + str);
		
		//获取长度
		System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
		System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
		System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//5
		
		//遍历二维数组
		//思路:先循环获取二维数组中的一维数组,再循环获取一维数组中的元素
		
		//遍历 -- for循环
		for (int i = 0; i < names.length; i++) {
			for (int j = 0; j < names[i].length; j++) {
				System.out.println(names[i][j]);
			}
		}
		System.out.println("--------------------");
		
		//遍历 -- foreach/增强for循环
		for (String[] ss : names) {
			for (String element : ss) {
				System.out.println(element);
			}
		}
		
	}

需求:使用动态初始化声明二维数组,其中第一个一维数组有3个元素,第二个一维数组有5个元素

public static void main(String[] args) {
		
		String[][] names = new String[2][];
		
		String[] s1 = {"麻生希","椎名空","水菜丽"};
		String[] s2 = {"爱田奈奈","古川伊织","水野朝阳","濑亚美莉","明日花绮罗"};
		
		names[0] = s1;
		names[1] = s2;
		
		for (String[] ss : names) {
			for (String element : ss) {
				System.out.println(element);
			}
		}
	}

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

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

相关文章

超维空间M1无人机使用说明书——01、ROS机载电脑使用说明——远程连接

引言&#xff1a;远程连接通常采用两种方式&#xff0c;一种是通过可视化软件&#xff0c;如VNC、Nomachine等&#xff0c;另外一种是使用SSH。各有优缺点&#xff0c;两种远程登录方式的优缺点做一个简单的对比&#xff1a; 1、SSH优缺点 优点:1、消耗网络资源 2、运行稳定 …

基于SSM的网上购物平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

JavaScript常用事件演示

文章目录 一、在JavaScript中什么是事件&#xff1f;二、什么是JavaScript 常用事件&#xff1f;三、常用JS事件代码示例:四、事件总结 一、在JavaScript中什么是事件&#xff1f; JavaScript 使我们有能力创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个…

基于Vue开发的一个仿京东电商购物平台系统(附源码下载)

电商购物平台项目 项目完整源码下载 基于Vue开发的一个仿京东电商购物平台系统 Build Setup # csdn下载该项目源码压缩包 解压重命名为sangpinghui_project# 进入项目目录 cd sangpinghui_project# 安装依赖 npm install# 建议不要直接使用 cnpm 安装以来&#xff0c;会有各…

Python异常捕获和处理语句 try-except-else-finally

目录 try-except-else-finally语句 1. 基本用法 2. 多个异常处理 3. 处理所有其他异常 4. 多个except子句 5. 使用else子句 6. 使用finally子句 7. 使用as关键字 实例 例1 例2 例3 例4 例5 例6 例7 例8 结论 try-except-finally语句 在Python中&#xff0c;try-e…

基于差分进化算法优化的Elman神经网络数据预测 - 附代码

基于差分进化算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于差分进化算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于差分进化优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的摄影跟拍预定管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

前端框架中的状态管理(State Management)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)

目录 一、前言 二、AOP—快速入门 1.动态代理优化 : 2.问题分析 : 3.AOP—基本介绍 : 4.AOP—使用说明 : 5.AOP—入门案例 : 三、AOP—切入点表达式 1.基本说明 : 2.语法格式 : 3.注意事项 : 4.代码演示 : 四、AOP—切入点表达式的更多细节 1.JoinPoint : 1.1 简…

c语言-库函数qsort()初识

目录 前言一、qsort()的介绍及使用1.1 qsort()的介绍1.2 qsort()的使用1.2.1 使用qsort|()对整型数组按照升序排序1.2.2 使用qsort()对整型数组按照降序排序1.2.3 使用qsort()对结构体数组数据进行排序 二、利用冒泡排序模拟实现对任何数据进行排序2.1 冒泡排序2.2 模仿qsort()…

无锁队列 SPSC

无锁队列 SPSC Queuehttps://www.cnblogs.com/sinkinben/p/17949761/spsc-queue 在多线程编程中&#xff0c;一个著名的问题是生产者-消费者问题 (Producer Consumer Problem, PC Problem)。 对于这类问题&#xff0c;通过信号量加锁 (https://www.cnblogs.com/sinkinben/p/1…

06、Kafka ------ 各个功能的作用解释(ISR 同步副本、非同步副本、自动创建主题、修改主题、删除主题)

目录 CMAK 各个功能的作用解释★ ISR副本 (同步副本&#xff09;★ 非同步副本★ 自动创建主题★ 修改主题★ 删除主题 CMAK 各个功能的作用解释 ★ ISR副本 (同步副本&#xff09; 简单来说 &#xff0c;ISR 副本 就是 Kafka 认为与 领导者副本 同步的副本。 ISR&#xff0…

基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码

基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于黄金正弦算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于黄金正弦优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

vue+nodejs微信小程序基于uniapp的学生宿舍打卡失物招领管理系统

基于微信的宿舍管理系统的设计基于现有的手机&#xff0c;可以实现等功能。方便用户对宿舍管理系统查看个人中心、失物招领管理、失物认领管理、晚归打卡管理、宿舍信息管理、宿舍更新管理、交流论坛、系统管理等功能模块的管理及详细的设计与统计分析。根据系统功能需求建立的…

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply&#xff0c;call&#xff0c;bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适&#xff0c;因为这三个函数是被函数对象调用的&#xff0c;并且每个函数都可以调用&#xff0c;所以不难想到有一个位置非常合适&#xff0c;…

【每日论文阅读】生成模型篇

联邦多视图合成用于元宇宙 标题: Federated Multi-View Synthesizing for Metaverse 作者: Yiyu Guo; Zhijin Qin; Xiaoming Tao; Geoffrey Ye Li 摘要: 元宇宙有望提供沉浸式娱乐、教育和商务应用。然而&#xff0c;虚拟现实&#xff08;VR&#xff09;在无线网络上的传输是…

HNU-数据库系统-作业

数据库系统-作业 计科210X 甘晴void 202108010XXX 第一章作业 10.09 1.(名词解释)试述数据、数据库、数据库管理系统、数据库系统的概念。 数据&#xff0c;是描述事物的符号记录。 数据库&#xff08;DB&#xff09;&#xff0c;是长期存储在计算机内、有组织、可共享的大量…

windows安装nvm以及nvm常用命令

目录 1.什么是nvm以及为啥要用nvm 1.什么是nvm 2.为什么要用nvm 2.安装nvm 1. 下载 2. 安装 1.双击解压后的文件,nvm-setup.exe 2.同意 3.安装路径 4.下一步&#xff0c;这里有建议改成自己的文件夹&#xff0c;这个是用来存储通过nvm切换node后版本的存储路径 5.安装…

基础面试题整理2

1.抽象类与接口区别 语法&#xff1a; 抽象类用abstract定义&#xff1b;接口用interface定义抽象类被子类继承extends&#xff08;不可用final修饰&#xff09;&#xff1b;接口被类实现implements抽象类的属性访问无限制,方法不可用private修饰&#xff1b;接口中的方法只能…

DQL命令查询数据(三)

本课目标 掌握MySQL的多表查询 SQL语句的综合应用 多表连接查询 通过各个表之间共同列的关联性&#xff08;例如&#xff1a;外键&#xff09;来查询的 分类&#xff1a; 内连接(INNER JOIN) &#xff0c;可简写为 JOIN&#xff1b;左外连接(LEFT OUTER JOIN)&#xff0c;…