数组
一、数组的概述
1、数组的定义
数组(Array)是多个相同数据类型数据按照一定的顺序排列的集合,并使用一个名字来命名,通过编号的方式对这些数据进行统一管理。
2、数组相关的概念
数组名
元素
角标,也叫做下标或者索引
数组的长度,也就是元素的个数
3、数组的特点
数组是有序排列的
数组属于引用数据类型变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型变量
创建数组对象会在内存中开辟一段连续的存储空间‘
数组的长度一旦确定,就不能修改
4、数组的分类
按照维数:一维数组,二维数组,·····
按照数组元素类型:基本数据类型元素数组,引用数据类型元素的数组
5、一维数组的使用
数组的声明和初始化
调用数组指定位置的元素
获取数组的长度
遍历数组
数组元素的默认初始值
数组的内存解析
package com.xunaxiao.array; public class ArrayTest { public static void main(String[] args) { // 静态初始化:数组的初始化和数组元素的赋值操作同时进行 int[] ids; ids = new int[]{1001,1002,1003,1004,1005}; // 动态初始化:数组的初始化和数组元素的赋值分开进行 String[] names = new String[5]; // 数组一旦初始化完成,其就确定了长度 for(int i = 0; i<ids.length;i++) { System.out.println("学生" + i + "的学号是:" + ids[i]); } /*数组元素的默认初始值 * 数组元素是整型:0 * 数组元素是浮点型:0.0 * 数组元素的char类型:0 或者 "\u0000" * 数组元素是boolean型:false */ int[] array1 = new int[5]; for(int i= 0;i<array1.length;i++) { System.out.println(array1[i]); } System.out.println("*********"); double[] array2 = new double[5]; for(int i= 0;i<array2.length;i++) { System.out.println(array2[i]); } System.out.println("*********"); char[] array3 = new char[5]; for(int i= 0;i<array3.length;i++) { System.out.println("$$$$" + array3[i] + "$$$$"); } System.out.println("*********"); } }
***一维数组的内存解析***
6、一维数组练习题
package com.xunaxiao.array; import java.util.Scanner; public class ArrayTest1 { public static void main(String[] args) { /* * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级; * 成绩 >= 最高分-10 等级是'A' * 成绩 >= 最高分-20 等级是'B' * 成绩 >= 最高分-30 等级是'C' * 其余 等级是'D' * 最后输出一句:学生***的成绩是:***等级是:*** */ Scanner input = new Scanner(System.in); System.out.print("请输入学生的个数:"); int n = input.nextInt(); // 创建数组 double[] students = new double[n]; System.out.println("请输入学生的成绩···"); for(int i = 0;i<students.length;i++) { System.out.print("学生" + i + "的成绩:"); students[i] = input.nextDouble(); System.out.println(); } double max = students[0]; for(int j = 1;j<students.length;j++) { if (max < students[j]) { max = students[j]; } } System.out.println("学生最高分为" + max); char grade; for(int k = 0;k<students.length;k++) { if(students[k] >= (max-10)) { grade = 'A'; System.out.println("学生" + k + "的成绩是:"+ students[k] + "等级是:" + grade); }else if(students[k] >= (max-20)) { grade = 'B'; System.out.println("学生" + k + "的成绩是:"+ students[k] + "等级是:" + grade); }else if(students[k] >= (max-30)) { grade = 'C'; System.out.println("学生" + k + "的成绩是:"+ students[k] + "等级是:" + grade); }else { grade = 'D'; System.out.println("学生" + k + "的是:"+ students[k] + "等级是:" + grade); } } } }
7、二维数组
二维数组的理解:
可以看作是一维数组Array1作为另一个一维数组Array2 的元素而存在。
(从数组的底层的运行机制来看,并没有多维数组。)
二维数组的使用:
数组的声明和初始化
调用数组指定位置的元素
获取数组的长度
遍历数组
数组元素的默认初始值
数组的内存解析
package com.xunaxiao.array; public class ArrayTest2 { public static void main(String[] args) { //1.二维数组的声明初始化 //静态初始化 int[][] array = new int[][]{{1,2,3,},{4,5},{6,7,8}}; //动态初始化1 String[][] array1 = new String[3][2]; //动态初始化2 String[][] array2 = new String[3][]; //2.调用数组的指定位置的元素 System.out.println(array[0][1]); System.out.println(array[1][1]); //3.获取数组的长度 System.out.println(array.length);//3 System.out.println(array[0].length);//3 //4.如何便利二维数组 for(int i=0;i<array.length;i++) { for(int j = 0;j<array[i].length;j++) { System.out.print(array[i][j] + " "); } System.out.println(); } /* * 5.二维数组的使用 * 规定:二维数组分为外层数组元素,内层数组元素 * int[][] array = new int[4][3]; * 外层元素:array[1],array[0]等 * 内层元素:array[0][0],array[1][2]等 * 数组元素的默认初始值 * 初始化方式一:int[][] array = new int[4][3]; * 外层元素的初始化值:地址值 * 内层元素的初始化值:0(因为是int类型的元素,随着数据类型而改变) * 初始化方式二:int[][] array = new int[4][]; * 外层元素的初始化值:null * 内层元素的初始化值:不能调用,否则报错 */ int[][] array3 = new int[4][3]; System.out.println(array3[0]); System.out.println(array3[0][0]); double[][] array4 = new double[4][]; System.out.println(array4[0]); System.out.println(array4[0][0]); } }
***二维数组的内存解析***
8、二维数组练习题
package com.xunaxiao.array; import javax.swing.plaf.synth.SynthOptionPaneUI; public class ArrayTest3 { public static void main(String[] args) { /* * 获取数组array中多有元素的值。 * 3 5 8 * 12 9 * 7 0 6 4 */ int[][] array = new int[][]{{3,5,8},{12,9},{7,0,6,4}}; int sum = 0; for(int i = 0;i<array.length;i++) { for(int j = 0;j<array[i].length;j++) { sum += array[i][j]; } } System.out.println("元素的和为:" + sum); } }
package com.xunaxiao.array; public class ArrayTest4 { public static void main(String[] args) { /* * 使用二维数组打印一个10行杨辉三角; * 第一行有1个元素,第n行有n个元素; * 每一行的第一个元素和最后一个元素都为1; * 从第三行开始,对于非第一个元素和最后一个元素,其值为上面一个元素和上面的前面一个元素的和; */ int[][] hanghui = new int[10][]; for(int i=0;i<hanghui.length;i++) { hanghui[i] = new int[i+1]; hanghui[i][0] = hanghui[i][i] = 1; for(int j = 1;j < hanghui[i].length-1;j++) { hanghui[i][j] = hanghui[i-1][j] + hanghui[i-1][j-1]; } } for(int i= 0;i<hanghui.length;i++) { for(int j =0;j<hanghui[i].length;j++) { System.out.print(hanghui[i][j] + " "); } System.out.println(); } } }