今日内容
- 数组入门
- 理解数组功能
- 数组声明创建
- 数组操作(取值,赋值)
- 遍历
- 练习题
- 内存图
复习
一、数组的介绍
数组就是一个容器,用来装多个数据的。
java的数组有特点
- 数组长度是固定的
- 数组存储的类型是固定的
- 可以存储重复元素
基本语法(声明+创建):
- 数据类型[] 数组名 = new 数据类型[长度];
- int[] arr = new int[3];
- 前后的数据类型要一致
二、数组使用
2.1 声明创建[重点]
public static void main(String[] args) {// 数据类型 变量名 = 值;// 数据类型[] 数组名 = new 数据类型[长度];int[] arr = new int[3];// 创建了长度为3的int型数组,以arr为代表double[] arr2 = new double[4];}
2.2 内存关系
- java的内存中分为几大区域,暂时先了解两个(栈,堆)
- 方法执行会进栈,执行完弹栈消失
- new出来的对象会进堆
- 在java中,凡是new 的都会在堆中创建对象
- 堆中创建数组对象,会开辟
连续
空间 - 给数组分配下标(也叫索引,index),下标从0开始
- 数组内赋默认值
- 对象会产生地址值
- 堆中创建数组对象,会开辟
2.3 数组操作
数组操作就两种用法: 存储数据(存值),取出数据(取值)
2.3.1 取值
// 声明创建数组// 数组创建时有默认值,int类型默认值是0,double是0.0// 数组有下标从0到长度-1int[] arr1 = new int[3];// 数组取值,通过数组名[下标]int a = arr1[0];int b = arr1[1];int c = arr1[2];System.out.println(a );System.out.println(b );System.out.println(c );
注意: 数组创建完后有默认值
- int类型是0
- double类型是0.0
- char类型是’ ’
- boolean类型是 false
- 引用类型默认值是null.因为String是引用类型,所以默认值是null
注意: 数组取值时注意下标越界问题
- ArrayIndexOutOfBoundsException
- 因为数组下标是从0至长度-1的
2.3.2 存值
语法: 数组名[下标] = 值;
// 数组存值// 数组名[下标] = 值;arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;// 存完再次取出查看效果System.out.println(arr1[0] );System.out.println(arr1[1] );System.out.println(arr1[2] );
2.3.3 完整代码
package com.qf;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/26* @desc 数组取值存值*/
public class Demo2 {public static void main(String[] args) {// 声明创建数组// 数组创建时有默认值,int类型默认值是0,double是0.0// 数组有下标从0到长度-1int[] arr1 = new int[3];// 数组取值,通过数组名[下标]int a = arr1[0];int b = arr1[1];int c = arr1[2];// int d = arr1[3]; // 下标3越界!System.out.println(a);System.out.println(b);System.out.println(c);// 数组存值// 数组名[下标] = 值;arr1[0] = 1;arr1[1] = 2;arr1[2] = 3;// 存完再次取出查看效果System.out.println(arr1[0]);System.out.println(arr1[1]);System.out.println(arr1[2]);System.out.println("-----------");// double默认值0.0// 创建长度为3的数组,存储金额double[] arr2 = new double[3];System.out.println(arr2[0]);// 0.0System.out.println(arr2[1]);System.out.println(arr2[2]);// 存储3个金额arr2[0] = 15000.0;arr2[1] = 5000;// int-->doublearr2[2] = 10000;// 取出查看效果System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );System.out.println("-----------");// 创建字符串数组,长度3,输出默认值// String默认值是null// 引用类型类型的默认值都是nullString[] arr3 = new String[3];System.out.println(arr3[0]);// nullSystem.out.println(arr3[1]);System.out.println(arr3[2]);// 存储3个人名arr3[0] = "刘备";arr3[1] = "李青";arr3[2] = "格雷福斯";// 取出查看效果System.out.println(arr3[0]);System.out.println(arr3[1]);System.out.println(arr3[2]);}
}
2.4 数组另一种创建方式[重点]
数据类型[] 数组名 = new 数据类型[长度];
这种创建方式,是指定长度不指定元素.
能不能在创建出数组的同时,数组内直接有指定的数据呢?
- 可以, 创建数组时不指定长度,但是指定数据
- 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
- 一般我使用简化语句:
数据类型[] 数组名 = {元素1,元素2,...};
public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3// 一样可以取值System.out.println(arr[0] );// 11System.out.println(arr[1] );// 22System.out.println(arr[2] );// 33// 也可以再重新赋值arr[0] = 10;arr[1] = 20;arr[2] = 30;System.out.println(arr[0] );// 10System.out.println(arr[1] );// 20System.out.println(arr[2] );// 30}
练习,换成double和String 各来一遍
package com.qf;/*** --- 天道酬勤 ---** @author QiuShiju* @date 2024/2/26* @desc*/
public class Demo3 {public static void main(String[] args) {// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3// 一样可以取值System.out.println(arr[0] );// 11System.out.println(arr[1] );// 22System.out.println(arr[2] );// 33// 也可以再重新赋值arr[0] = 10;arr[1] = 20;arr[2] = 30;System.out.println(arr[0] );// 10System.out.println(arr[1] );// 20System.out.println(arr[2] );// 30System.out.println("-------------------" );double[] arr2 = {12.3,65.4,78.9};System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );// 存值arr2[0] = 1;arr2[1] = 2;arr2[2] = 3.0;System.out.println(arr2[0] );System.out.println(arr2[1] );System.out.println(arr2[2] );System.out.println("------------------" );String[] arr3 = {"蛮子","亚瑟","赵信"};// 取值System.out.println(arr3[0] );System.out.println(arr3[1] );System.out.println(arr3[2] );// 存值arr3[0] = "刘备";arr3[1] = "张飞";arr3[2] = "关羽";}
}
2.5 数组长度属性
数组中有一个属性,length,可以获得数组的长度(存储的数据个数,容量大小).
语法: 数据类型 变量 = 数组.length;
// 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};// int[] arr = new int[]{11,22,33};int[] arr = {11,22,33};// 简化了格式// 以上方式创建整型数组arr,其中直接存储了元素11,22,33// 数组长度是3int length = arr.length;System.out.println("数组长度:" + length );
三、数组遍历[重点]
遍历: 将数组中的元素一个一个全部取出.
使用for循环遍历
public static void main(String[] args) {// 声明创建整型数组int[] arr = {11,22,33,44,55};// 遍历输出// 因为下标从0开始for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
四、练习题
1设计整型数组,要求计算出数组中数字的和
// 1设计整型数组,要求计算出数组中数字的和public static void arrSum() {int[] arr = {1,2,3,4,5};int sum = 0;for (int i = 0; i < arr.length; i++) {int n = arr[i];sum += n;}System.out.println("数组的和 sum = " + sum );}
2设计整型数组,要求计算出数组中数字的平均数
public static void arrAvg() {int[] arr = {1,2,3,4,5,6};int sum = 0;for (int i = 0; i < arr.length; i++) {int n = arr[i];sum += n;}double avg = sum * 1.0 / arr.length;System.out.println("数组的平均数 avg = " + avg );}
3键盘输入5个人名到数组,然后变量输出这个人名
提示: String name = scanner.next(); // 来接收字符串数据
public static void inoutName() {Scanner scanner = new Scanner(System.in);String[] names = new String[5];// 先创建数组,准备向其中存数据// 循环向数组存储数据for (int i = 0; i < names.length; i++) {System.out.println("请输入第"+(i+1)+"个人名:" );String name = scanner.next( );names[i] = name;}// 变量输出for (int i = 0; i < names.length; i++) {System.out.println(names[i] );}}
ps: 变式练习,将输出结果拼接成[元素,元素,元素,…]的形式输出
提示: 利用字符串拼接完成
4设计整型数组,输出数组中的最大值
五 总结
今天是数组基础,讲的都是重点,必须掌握
- 数组声明,
- 两种创建方式
- 取值存值
- 遍历