Java的学习记录:charpter4.数组

4.数组

数组是重要的数据结构之一,使用数组可以帮我们快捷的解决很多实际问题。
什么是数组?
数组是具有相同类型的一组数据的集合。例如:球类的集合——足球、篮球、乒乓球等;电器集合——电视机、空调、洗衣机等。在程序设计中将这些集合称为数组。根据数组的维数将数组分为一维数组、二维数组…

4.1一维数组

一维数组实质上是一组相同类型数据的线性集合,在程序中需要处理一组数据,或者传递一组数据时,可以应用这种类型的数组。

4.1.1一维数组的定义

一组类型相同存储空间表示

4.1.2一维数组的长度

一组可以包含的元素数量:0~N(N的最大值取决于内存),即数组的长度为length,并且元素从0到length-1。

4.1.3一维数组的创建步骤

主要分为4个步骤:
1.数组的声明
语法:
数据类型[] 数组名; 或者 数据类型 数组名[];
如:int[] array;
一般Java中推荐使用前面那种,后者属于c++的写法。
2.分配空间
语法:
数组名称 =new 数据类型[空间数量];
如:array = new int[10];
分配好的数组都会有默认的初值:各种不同类型的数组初值如下:
​ char:0或’\u0000’
​ Stirng: null
​ byte/short/int/long: 0
​ float/double: 0
​ boolean: false
空间数量即数组的长度
3.赋值
语法:
数组名称[下标] = 值;
如:array[0] = 1;
数组的下标从0开始,到length-1结束,如果数组的下标超出length-1则会出现数据越界异常:
java.lang.ArrayIndexOutOfBoundsException:-1
4.使用
如:System.out.println(array[0]);

5.数组声明的同时分配空间
语法:
数据类型[] 数组名称 = new 数据类型[空间数量];
如:int[] array = new int[10];

6.声明+分配空间+赋值
语法1:
数据类型[] 数组名称 = new 数据类型[]{…};
语法2:
数据类型[] 数组名称 ={…};
通常我们使用第二种写法。

4.1.4增强型for

使用场合:完全遍历
快捷键:array+for
​ for(数据类型 val(变量): 遍历对象(数组名称)){
}
如:for(int t: array){
​ System.out.println(t);
​ }

注意
​ 1.遍历数组时数据类型要保证与原数组的类型相同
​ 2.t为数组array中依次从最小下标0取出的值副本,不能用来赋值

4.2多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。

二维数组
如果一维数组中的各个元素仍然是一个数组,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。

二维数组的创建
二维数组可以看做是特殊的一维数组,因此,二维数组的创建同样有两种方式。
1.先声明,再分配空间
语法:
数组元素的类型[][] 数组名称;
如:int array[][];
对于高维数组来说,有两种分配空间的方式:
1)直接为每一维分配内存空间
如:array = new int[2][4];它表示二维数组中有两个长度为4的一维数组。
2)分别为每一维分配空间
如:array = new int[2][];a[0] = new int[2]; a[1] = new int[3];
它表示二维数组由两个一维数组组成,第一个长度为2,第二个长度为3

2.声明的同时为数组分配空间
如:int[][] array = new int[2][3];.

4.3.数组的基本操作

4.3.1增强型for循环

使用场合:完全遍历
快捷键:array+for
​ for(数据类型 val(变量): 遍历对象(数组名称)){
}
如:for(int t: array){
​ System.out.println(t);
​ }

4.3.2向数组中插入一个值

示例:
//向长度固定的一维数组插入一个随机数,并按小到大排序

  Scanner input = new Scanner(System.in);

//定义一个长度为6,值固定的一维数组

 int[] array = {3,10,13,21,55,0};
 
   System.out.print("请输入插入数值:");

  int val = input.nextInt();
 
  int i = 0;
  
   //定位,寻找该数值应该处在的位置(从左向右定位)
   
   for (; i < array.length-1; i++) {
      
        //从0开始找,找一个比val大的位置
      
       if(array[i]>val){
           
            break;
       }
       
    }
    
  //挪(从右向左挪),
   for (int j = array.length-1; j > i; j--) {
       array[j] =array[j-1];
  }
  
  //找到该值应该在的位置后,将其插入
  array[i] = val;
   for (int g : array) {
        System.out.println(g);
   }

4.3.3输入一个随机数,删除数组中与其重复的值

示例:

    Scanner input = new Scanner(System.in);
    int[] array = {3,10,13,21,55};
    System.out.print("请输入插入值:");
    int val = input.nextInt();
    int i = 0;
    //定位
    for (; i < array.length; i++) {
        if(array[i]==val){
            break;
        }
    }

    //如果没有
    if(i==array.length){
        System.out.println(val+"不存在");
    }else{//如果有,删除掉
        //挪
        for (int j = i; j < array.length-1; j++) {
            array[j] = array[j+1];
        }
        //最后一位元素赋值为0
        array[array.length-1] = 0;
        for (int g : array) {
            System.out.println(g);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值