小东吖 之 java 数组
来源:互联网 发布:seo和sem的区别与联系 编辑:程序博客网 时间:2024/05/22 02:23
一. 数组
1.什么是数组?
如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。如何解决这个问题,Java语言提供了数组(array)的数据结构,是一个容器可以存储相同数据类型的元素,可以将100个数存储到数组中数组相当于 一个容器 存放了一组相同类型的数据比如 int 元素都是整型的
2 数组存取的规则
存: 是以_下标(角标)来存放的 并且下标从0开始取: 在数组中取出一个值 数组名[角标]
3.数组声明规范
格式一数据类型[] 数组名 = new 数据类型[元素个数或数组长度];示例:int[] arr = new int[5];// 数组的长度一但确定 不能改变其中 new 用来在内存中产生一个容器实体,数据要存储是需要有空间的,存储很多数据的空间用 new 操作符来开辟,new int[3]; 这个3是元素的个数。右边这部分就是在内存中定义了一个真实存在的数组,能存储3个元素。
格式二数据类型[] 数组名 = new 数据类型[]{元素1,元素2,……};int[] arr = new int[]{3,5,1,7};int[] arr = {3,5,1,7};arr[0] = 3; //数组的取值
注意:给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小。创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。
例如:
// 需求 自定义一个数组并取出下标量为2的数int[] array = new int[]{3,6,8,5}; // array.length = 4 是数组的长度System.out.println(array[2])
结果
8
二. 数组的遍历
// 这就是数组的第一个常见操作 ->数组的遍历public static void main(String[] args) {int[] x = { 8, 9, 7 };for (int i = 0; i < x.length; i++) {System.out.println(x[i]);// System.out.println(x[i]); 打印效果 } }
再看一个程序
// 随机十个数 随机的区间为 [10,120]// 1. 把十个数放入数组中// 2. 打印最大值int[] array = new int[10];for(int i = 0;i < array.length;i++){ int number = (int)(111 * Math.random() + 10); array[i] = number; //数据保存到数组中}int max = array[0]; //定义最大值并初始化为array[0];for(int j = 0;j < array.length;j++){ if(array[i] > max){ max = array[i]; }}System.out.println("最大值为: " + max)
三. 数组常见的异常问题
1. NullPointerException 空指针异常原因: 引用类型变量没有指向任何对象,而访问了对象的属性或者是调用了对象的方法。2. ArrayIndexOutOfBoundsException 索引值越界。原因:访问了不存在的索引值。一数组角标越界异常:,注意:数组的角标从0开始。
例如:
public static void main(String[] args) {int[] array = { 1, 2, 3 };System.out.println(array[3]);//java.lang.ArrayIndexOutOfBoundsException}
四. 数组的一些常见练习
- 根据索引(数组的下标)找元素 finderNumber
查表法 - 根据元素找索引 (数组的下标) findIndex
根据索引找元素的练习
//需求: 封装一个函数 传入数字1 返回 一// 需要一个容器 把中文数据 保存一下// 按传入的数字 查找对应的值public static char findNumber(int a){ char[] array = new char[]{'一','二','三','四','五','六','日'}; return array[a - 1];}
根据元素找索引的练习
需求: 定义一个数组 数组值 分别 8,18,28,38在数组中查找 18的位置int index = 0;int[] array = new int[]{8,18,28,38};for(int i = 0;i < array.length;i++ ){ if(array[i] == 18){ index = i; break; }}System.out.println("下表数为: " + index);
3.数组元素 反转(把数组中的元素 位置进行改变)
事先要了解怎么位置改变int temp = 0;int a = 6;int b = 9; // 把 a 和 b 的位置交换temp = a; // 交换a = b;b = tmp;
例如:
// 需求 定义一个数组 为 1 2 3 4 5 6 所有位置进行交换int[] array = {1,2,3,4,5,6};int num = array.length; // 一定要找到 交换的次数for(int i= 0;i < num;i+=){ int temp = 0; // 交换的规律 temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp;}System.out.println(Arrays.toString(array));
五. 数组的排序
- 冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
举例说明:要排序数组:int[] array={6,3,8,2,9,1};
int[] array = new int[]{6,3,8,2,9,1};for(int i = 0;i < array.length - 1;i+=){ for(int j = 0;j < array.length - 1 - i;j++){ if(array[j] > array[j+1]){ int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } }}System.out.println(Arrays.toString(array));
2.选择排序
int[] array = new int[]{6,3,8,2,9,1}; for (int i = 0; i < array.length; i++) { for (int j = i+1; j < array.length; j++) { if (array[i] > array[j]) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } } System.out.println(Arrays.toString(array));
六. 二维数组
1.什么是二维数组?
定义: 二维数组也是容器 保存的是多个一维数组 相同类型的一维数组
2.声明的方式
数据类型 [][] 数组名 = 初值; 数组类型[][] 数组名 = new 数组类型[一维数组的个数][每一个一维数组中元素
声明方式一
// 有四个一维数组 // 并且 每个一维数组 是三个元素的 二维数组// 注意: 声明时 需要把有几个一维数组 声明出来int[][] array= new int[4][3]; //四行三列
声明方式二
声明方式2// 需求 声明一个 有3个一维数组 并且 每个一维数组中 有四个元素的二维数组// 声明一个 三行四列的二维数组int[][] array = new int[][] { {1,2,3,4}, {4,3,2,1}, {6,8,9,3} } ;
3.动态初始化 也就是遍历二维数组
for (int i = 0; i < array.length; i++) { // 外循环控制行数 for (int j = 0; j < array[i].length ; j++) { // 内循环控制 每行的元素 int number = array[i][j]; System.out.print(array[i][j] + " "); } System.out.println();}
阅读全文
0 0
- 小东吖 之 java 数组
- java之数组学习
- Java 之 Array 数组
- Java基础之数组
- Java基础之数组
- Java 之 Array 数组
- Java基础之数组
- JAVA之数组
- JAVA之数组详解
- Java杂谈之数组
- java基础之数组
- java之数组排序
- Java基础之数组
- JAVA基础之数组
- java基础之数组
- JAVA笔记之数组
- Java之数组排序
- Java基础之数组
- [BZOJ2956]模积和-根号分块
- springmvc注解之@RequestMapping注解
- spring中@autowired的配置
- Laravel 面试题
- 【转载】无需人类知识,DeepMind新一代围棋程序AlphaGo Zero再次登上Nature
- 小东吖 之 java 数组
- 中国联通研究院发力开源 取得互联网化核心技术能力新突破
- 惊艳全球数据行业的16个数据可视化案例
- maven 构建 mysql数据库利用 properties连接
- 【转载】一文看懂中美AI产业布局,美国领衔芯片、算法、NLP领域
- Java单例模式之懒汉
- 【转载】区块链能在食品领域做些什么?
- Centos7下安装最新的MariaDB 10.2
- 以洗衣机为例介绍“自顶向下,逐步求精”