Java第四章——————数组

技能目标:

1.掌握数组的定义

2.数组的内存分配

3.掌握数组的遍历

4.掌握Arrays类的常用用法

5.了解二维数组的使用

1.一维数组

1.理解数组

需求:

存储50个学生某门课的成绩,并求其平均值

如果是之前需要给每个学生定义一个变量

如:

int scorce1 =95;

int scorce2 =92;

int scorce3 =93;

int scorce4 =94;

.....

int scorce50 =90;

avg =(scorce1+....+scorce50)/50

如果用数组就会简单很多

先来看看数组定义

定义数组时一定要指定数组的名称和数组的类型

必须的抒写方式“[]”,表示的就是定义一个数组,而不是一个普通的变量

"[数组长度]"决定了连续分配的空间长度,通过数组length属性可以获取数组长度

数组的数据类型用于确定分配每个空间的大小(new)

int scorce[]=new int

int scorce[]=new int[50];

这样就定义了一个整形数组scorce可以存放50了数据

数组元素分配的初始值为0

数组元素的类型默认初始值
byte、short、int、long0
float、double0.0
char”\u0000“
booleanfalse
引用数据类型null

每种类型的初始值不同

3.数组元素的表示与赋值

由于定义数组时内存分配的是连续的空间,所以数组元素在数组里面顺序排列编号,该编号即元素下标,它标明了元素在数组中的位置。首元素的编号规定为0,因此,数组下标依次为0、1、2、3、4....依次增加,每次的增长数是1.数组中的每个元素都可以通过下标来访问。例如,数组scores的第一个元素表示为scores[0].

如:

scorce[0] =65 //表示scorce数组的第一个元素赋值给他为65

scorce[1]=87 //表示scorce数组的第二个元素赋值给他为85

4.数组的初始化

所谓的数组初始化,就是在定义数组时一并完成赋值操作

数组的初始化的语法格式:

数据类型[] 数组名={值1,值2,....值n}

或者:

数据类型[] 数组名 =new 数据类型[]{值1,值2,值3,....}

5.遍历数组

数组和循环往往结合在一起使用,通常使用for循环

示例:

需求:

创建整型数组,循环输出数组元素

实现步骤:

1.初始化整型数组

2.以循环变量i为数组下标,循环输出数组元素

jdk1.5之后为我们提供了一个增强for循环,用来实现对数组和集合中的访问,增强for循环的语法格式:

for(元素类型 变量名:要循环的数组或集合){

......

}

括号中的第一个元素类型指的时数组或集合中元素类型,变量名在循环时保存每个元素的值,冒号后面是我们要循环的数组或集合的名称

i 即是对应每个数组值

示例:使用数组计算成绩

使用数组计算5名学生的平均分和最高分、最低分

实现的步骤:

1.定义长度为5的整型数组

2.定义两个float类型的变量,用于保存总成绩、平均分、初始值为0

3.定义两个int类型的变量,用于保存最高分和最低分,初始值为0;

4.从控制台上接收5名学生的成绩

5.通过循环使数组的5个元素相加得到总成绩

6.通过循环遍历数组并比较元素的大小,得到最高分和最低分

 

示例:数组的添加

当已经存在一个数组”arr“时,如何向数组”null”位置插入数呢?

分析:

index变量相当于一个监听器。赋初始值为“-1”,就是为了和数组下标:0,1,2...区分开。

遍历数组中的元素,如果发现null就会把i赋值给index,相当于找到了null的下标,此时使用break跳出循环

随后进入下一个if语句,首先判断index值是否变化,如果变化了(不等于-1),说明发现null的元素

“arr[index]="f"”.因为index在上个if语句中已经充性赋值为null的下标,这时直接找到那个空位置 f ”

示例:数组的修改

需求:

当已经存在一个数组“arr”,如何修改 f 的值?

 

 与添加类似用index找到需要

示例:数组删除

需求:

当已经存在一个数组“arr”时,如何删除“b”的值呢

思路:

首先找到要删除的位置,把后面的数据依次前移,将最后以一位设置null

常见问题

注意:

数组的下标从0开始。而不是从1开始,如果访问数组元素时指定下标小于0,或者大于数组的长度,都会出现这个数组下标越界这个异常

4.二维数组

java中定义和操作多维数组的语法与一维数组类似。在实际开发中,使用的很少.

定义二维数组的语法格式:

数据类型[][] 数组名

或者

数据类型 数组名[][]

1.数组类型是数组元素的类型

2.[][] 用于定义了一个二维数组,通过·多个下标进行数据访问

示例:

定义一个整型的二维数组,并为其分配的内存空间

int[][] s =new int[3][5];

表面上看是二维数组,但是从内存分配来看,实际上就是一个一维数组,数组名为s,包括了3个元素,分别是s[0]、s[1]、s[2],每个元素是整型数组类型,即一维数组类型。而s[0]又是一个数组的名称,包括了5个元素

分别是s[0][0]、s[0][1]、s[0][2]、s[0][3]、s[0][4]、每个元素都是整数类型。s[1]、s[2]、s[3]情况相同
所以二维数组实际上就是一个一维数组,每个元素又是一个一维数组。    
s[1][0]、s[1][1]、s[1][2]、s[1][3]、s[1][4]

注意:

从语法上看Java支持多维数组,但是从内存分配原理上来看,其实就是一维数组,java中只有一维数组,没有多维数组。

二维数组得使用

二维数组也可以进行初始化操作,与一位数组类似,同样可以采用两种方式

格式

示例:

int arr[][];

int arr=new [3][5];

或者

int arr[][]=new int[3][5];

1.初始化二维数组

示例:int arr[][]=new int[][]{ {1,2,3,4,5},{2,3,5},{9} };

或者

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

2.二维数组的遍历:

示例15:

分别计算每个班级的总成绩

实现的步骤:

1.初始化一个整数型的二维数组

2.定义和保存总成绩的变量

3.使用for循环遍历二维数组

Arrays类

JDK中提供了一个专门用于操作数组的攻击类,即Array类,位于java.util包中,该类提供了一系列方法来操作数组,比如排序、复制、比较、填充等、用户直接调用这些方法即可,不需要自己编码去实现,降低开发难度。

方法返回值说明
equals(array1,array2)boolean比较两个数组是否相等
sort(array)void对数组arry元素的进行升序的排列
toString(arrry)string将一个数组arry转换一个字符串
fill(arry,val)void把array数组中所有的元素都赋值为val
copyOf(arry,length)与arry数据类型一致把数组arry复制成一个长度为length的新数组
binarySearch(array,val)int查询元素值val在数组arry中的下标

1.比较两个数组是否相等

Arrays类的equals()方法·用于标胶两个数组是否相等,只有当两个数组长度相等,对应的位置的元素也就一一相等时,该方法就返回true否则返回false

示例16

需求:

初始化3个整数的一维数组,使用Arrays类的equals()方法判断是否两两相等,并输出结果

 

2.对数组的元素进行升序排列

Arrays类的sort()方法对数组的元素进行升序排列,也就是从小到大的顺序排列

示例17:

需求:

分别对1班,2班,3班的学员成绩进行排序

实现步骤:

1.初始化一个整型的二维数组

2.使用for循环去遍历二维数组

3.使用Arrays类的sort()方法对二维数组的元素进行升序排列

4.输出验证排序

 

3.将数组转换成字符串

toString()将一个数组转换成一个字符串,它按照顺寻把多个数组元素连接一起,多个元素之间使用英文逗号和空格隔开

 

4.将数组所有的元素赋值为相同的值

Arrays类中提供了一个fill(arry,val),此方法用于把数组arry所有的元素都赋值为val

示例19:

public class Text {
    public static void main(String[] args) {
        int ban[]={99,91,54,99,100};
        System.out.println(Arrays.toString(ban));
        Arrays.fill(ban, 97);
        System.out.println(Arrays.toString(ban));
    }
}




结果:

[99, 91, 54, 99, 100]
[97, 97, 97, 97, 97]

5.将数组复制成一个长度为设定值的新数组

实现的步骤:

1.初始化一个长度为4的整型数组

2.使用copyOf()方法

public class Text1 {
    public static void main(String[] args) {
        int ban[]={99,91,54,99,100};
        System.out.println(Arrays.toString(ban));
        int ban2[]=Arrays.copyOf(ban,3);
        System.out.println(Arrays.toString(ban2));
        int ban1[]=Arrays.copyOf(ban,8);
        System.out.println(Arrays.toString(ban1));
           }
}

结果:
[99, 91, 54, 99, 100]
[99, 91, 54]
[99, 91, 54, 99, 100, 0, 0, 0]

注意:

Arrays类的copyOf(array,length)方法可以进行数组复制,把原数复制成一个新数组,其中length是新数组的长度。如果length小于原数组的长度,则新数组就是原数组的前面length个元素;如果length大于原来数组的长度,则新数组前面的元素的原数组的所有元素;后面元素是按数组类型补充默认的初始值,如整型补充0,浮点型补充0.0等。

6.查询元素在数组中的下标

示例21:

本章总结:

1.数组可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型

2.数组中的元素通过数组下标进行访问,数组下标从0开始

3.二维数组实际上是一个一维数组,它的每个元素是一个一维数组

4.使用Arrays类提供的方法可以方便的对数组中的元素进行排序,查询等操作。

5.JDK1.5之后提供了增强for循环,可以用来实现对数组和集合中数据的访问

​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值