小东吖 之 java 数组

一. 数组

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();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值