如:int[ ] array = new int[10] 数组的另一种声明方式: int array[ ] = new int[10] // 这种方式是延续C++的声明方法,不推荐使用,因为容易跟变量声明混淆
调用数组的 length属性可以获取数组长度array.length
通过下标的方式访问数组的每个元素 注:数组下标从 0 开始,对于长度为n的数组,下标范围是 0 ~ n-1int[0]、int[1] …
引用下标超过一维数组的下标范围时的报错:java.lang.ArrayIndexOutOfBoundsException 对比 0作除数时的报错 :java.lang.ArithmeticException: / by zero
char[ ] array1 = {‘a’, ‘b’, ‘c’, ‘d’} boolean[ ] array2 = {false, false, true, false} 静态方式完整版: boolean[ ] array2 = new boolean[ ] {false, false, true, false} // 简化版省略了高亮部分
int num = 2;
声明数组时,会将数组元素连续存储在堆区,而栈区会存放数组在堆区的地址信息int[ ] arr1 = new int[2]; 代码分析: 当执行等号左边的int[ ] arr1时,会在栈区申请一个内存空间 当执行等号右边的new int[2]时,会在堆区申请一个连续内存空间,并存储数组所有元素 当执行中间的赋值操作时,相当于把该数组在堆区的内存地址赋值给栈区申请到的内存空间 所以 System.out.println(arr1) 打印的是数组的地址(如0x10),而不是数组的所有元素
brr = arr 表示 arr 表示的地址赋值给brr,相当于让brr和arr指向了同一块堆区空间,有本质上就是改变指向而已
/* 编程实现数组之间元素的拷贝 */ public class ArrayCopyTest { public static void main(String[] args) { // 1.声明一个初始值为11、22、33、44、55的一维数组 int[] arr = {11, 22, 33, 44, 55}; // 打印数组中的所有元素 System.out.print("第一个数组中的元素有:"); for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 11 22 33 44 55 } // 2.声明一个长度为3元素类型为int类型的一维数组 int[] brr = new int[3]; // 打印数组中的所有元素 System.out.print("第二个数组中的元素有:"); for(int i = 0; i < brr.length; i++) { System.out.print(brr[i] + " "); // 0 0 0 } // 3.将第一个数组中的中间3个元素赋值到第二个数组中 /* for(int i = 0; i < brr.length; i++) { brr[i] = arr[i+1]; } */ // 也可以直接使用Java官方提供的拷贝功能 // arraycopy(Object src, int srcPos, Object dest, int destPos, int length) // 表示将数组arr中下标从1开始的3个元素拷贝到数组brr中下标从0开始的位置 System.arraycopy(arr, 1, brr, 0, 3); // 打印第二个数组中的所有元素 System.out.print("第二个数组中的元素有:"); for(int i = 0; i < brr.length; i++) { System.out.print(brr[i] + " "); // 22 33 44 } // 4.笔试考点 // 表示将变量arr的数值赋值给变量brr,覆盖变量brr中原来的数值 // 数组名arr的内存空间中存放的是数据在堆区中的内存地址信息,赋值后让brr变量中存放了arr所指向堆区的内存地址 // 也就是让brr和arr指向了同一块堆区空间,有本质上就是改变指向而已 brr = arr; // 打印第二个数组中的所有元素 System.out.print("第二个数组中的元素有:"); for(int i = 0; i < brr.length; i++) { System.out.print(brr[i] + " "); // 22 33 44 } System.out.println(); } }如:123123 => 1出现2次,2出现2次,3出现2次
import java.util.Scanner; public class ArrayCountTest { public static void main(String[] args) { // 1.提示用户输入一个正整数并使用变量记录 System.out.println("请输入一个正整数:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); // 2.准备一个长度为10元素类型int类型的一维数组,默认值为0 int[] arr = new int[10]; // 3.拆分正整数中的每个数字并统计到一维数组中 int temp = num; while(temp > 0) { arr[temp%10]++; temp /= 10; } // 4.打印最终的统计结果 for(int i = 0; i < arr.length; i++) { if(arr[i] > 0) { System.out.println("数字" + i + "出现了" + arr[i] + "次!"); } } } }方式一:数据类型 [ ] [ ] 数组名称 = new 数据类型[行数] [列数] 方式二:数据类型 [ ] [ ] 数组名称 = {{a1, a2, …}, {b1, b2, …}, …} // 静态方法的简化版 静态方法的完整版:数据类型 [ ] [ ] 数组名称 = new 数据类型[ ] [ ] {{a1, a2, …}, {b1, b2, …}, …}
/* 编程实现二维数组的声明和使用 */ public class ArrayArrayTest { public static void main(String[] args) { // 1.声明一个具有2行3列元素类型为int类型的二维数组 int[][] arr1 = new int[2][3]; // 打印数组中的每个元素 // 使用外层for循环控制打印的行数 for(int i = 0; i < arr1.length; i++) { // 使用内层for循环控制打印的列数(注意此处j范围的表达,不要写成常量,因为每一列的长度可以不一样) for(int j = 0; j < arr1[i].length; j++) { System.out.print(arr1[i][j] + " "); // 全是0 } System.out.println(); } System.out.println("--------------------------------------------------"); // 2.实现二维数组中元素的赋值 int cnt = 1; // 使用外层for循环控制打印的行数 for(int i = 0; i < arr1.length; i++) { // 使用内层for循环控制打印的列数 for(int j = 0; j < arr1[i].length; j++) { arr1[i][j] = cnt++; } } // 使用外层for循环控制打印的行数 for(int i = 0; i < arr1.length; i++) { // 使用内层for循环控制打印的列数 for(int j = 0; j < arr1[i].length; j++) { System.out.print(arr1[i][j] + " "); // 1 2 3 4 5 6 } System.out.println(); } System.out.println("--------------------------------------------------"); // 3.二维数组元素的初始化操作 int[][] arr2 = {{11, 22, 33, 44}, {55, 66, 77, 88}}; // 使用外层for循环控制打印的行数 for(int i = 0; i < arr2.length; i++) { // 使用内层for循环控制打印的列数 for(int j = 0; j < arr2[i].length; j++) { System.out.print(arr2[i][j] + " "); // 11 22 33 44 55 66 77 88 } System.out.println(); } System.out.println("--------------------------------------------------"); // 4.考点 int[][] arr3 = new int[3][]; arr3[0] = new int[3]; arr3[1] = new int[4]; arr3[2] = new int[5]; } }int [ ] [ ] arr1 = new int[3] [ ]; // 声明一个三行但不确定几列的二维数组 arr1[0] = new int[3]; // 每列的长度可以不一样 arr1[1] = new int[4]; arr1[2] = new int[5];