小东吖 之 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}

四. 数组的一些常见练习

  1. 根据索引(数组的下标)找元素 finderNumber
    查表法
  2. 根据元素找索引 (数组的下标) 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. 冒泡排序
    原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第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();}
原创粉丝点击