ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
数组定义:能够保存一组数据 特点:1.数据必须同类型;2.固定长度; *** ### 数组定义方式: ~~~ public class ArrayDemo1 { public static void main(String[] args) { // 数组:一个容器,能够放一组数据 // 特点(缺点):1.必须是同类型;2.固定长度 // 声明方法1:数组类型 数组名[] = new 数组类型[长度];数组类型[] 数组名 = new 数组类型[长度]; int arr1[] = new int[5];// 默认保存了5个0 // String str[] = new String[5];// 默认保存了5个null // boolean b[] = new boolean[5];// 默认保存了5个false // 通过下标值去访问数组元素:长度为n的数组,下标值范围0-->n-1 arr1[0] = 120; arr1[1] = 121; arr1[2] = 122; arr1[3] = 123; arr1[4] = 124; // arr1[5] = 125;// 数组越界 // System.out.println(arr1[0]); // 声明方法2:数组类型 数组名[] = new 数组类型[]{元素1,元素2,....}; int arr2[] = new int[] {120,121,122,123,124}; System.out.println(arr2[3]); // 声明方法3:数组类型 数组名[] = {元素1,元素2,....}; int arr3[] = {120,121,122,123,124,125}; // 数组的length属性 System.out.println(arr3.length); // 字符串的length()方法 System.out.println("hello".length()); } } ~~~ ### 数组常见操作--遍历 ~~~ public class ArrayDemo2 { public static void main(String[] args) { // 数组的遍历(取到数组中每一个元素) // length遍历次数-->数组名[下标] int arr[] = {5,7,23,98,111,13,77}; // 遍历方法1: // for(int i = 0;i < arr.length;i++) { // int num = arr[i]; // System.out.println(num); // } // 遍历方法2:增强for循环 for(int num:arr) { System.out.println(num); } String str[] = {"ab","cd","ef","g"}; for(String s:str) { System.out.println(s); } } } ~~~ ### 一维数组内存模型 ![](https://box.kancloud.cn/33f0c8426c3f658e45ab283d25a2c81f_688x419.png) ### 二维数组内存模型 ![](https://box.kancloud.cn/100f7b53ee174fb0380fecdc282dfaad_691x419.png) ### 二维数组的定义及遍历 ~~~ public class ManyArrayDemo1 { public static void main(String[] args) { // 二维数组 // int arr1[][] = {{1,2,3},{4},{5,6,7,8}}; // System.out.println(arr1.length);// 5 // 第二种声明方式 // int[][] arr2 = new int[3][]; // arr2[0] = new int[]{1,2,3}; // arr2[1] = new int[]{4,5,6}; // arr2[2] = new int[]{7,8,9,10,11,12}; // 二维数组的访问 // System.out.println(arr2[2][2]); // 二维数组遍历 // for(int i = 0;i < arr1.length;i++) { // for(int j = 0;j < arr1[i].length;j++) { // System.out.print(arr1[i][j]+" "); // } // System.out.println(); // } } } ~~~ ### 排序(冒泡,选择) ~~~ public class ArrayDemo4 { public static void main(String[] args) { // 1.冒泡排序 // int[] arr={6,3,8,2,9,1}; // for(int i = 0;i < arr.length - 1;i++) { // for(int j = 0;j < arr.length - i - 1;j++) { // if(arr[j] < arr[j+1]) { // int temp; // temp = arr[j]; // arr[j] = arr[j+1]; // arr[j+1] = temp; // } // } // } // for(int num:arr) { // System.out.println(num); // } // 2.选择排序 int[] arr={6,3,8,2,9,1}; // 1-1 3,6,8,2,9,1 1-2 3,6,8,2,9,1 1-3 2,6,8,3,9,1 1-4 2,6,8,3,9,1 1-5 1,6,8,3,9,2 // 2-1 1,6,8,3,9,2 2-2 1,3,8,6,9,2 2-3 1,3,8,6,9,2 2-4 1,2,8,6,9,3 for(int i = 0;i < arr.length - 1;i++) { for(int j = i + 1;j < arr.length;j++) { if(arr[i] > arr[j]) { int temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } for (int num : arr) { System.out.println(num); } } } ~~~ ### 快速排序及数组拷贝 ~~~ public class ArrayDemo5 { public static void main(String[] args) { int arr[] = {7,5,3,2,1,9,10}; Arrays.sort(arr);// 快速排序--升序 for(int num:arr) { System.out.println(num); } } } ~~~ ~~~ public class ArrayCopyDemo1 { public static void main(String[] args) { // 数组的复制 int source[] = {1,2,3,4,5,6}; int dest[] = {7,8,9,10,11,12,13,14,15}; /* * source:源数组 * srcPos:源数组中的起始位置 * dest:目标数组 * destPos:目标数组中的起始位置 * length:要复制的数组元素的个数 */ System.arraycopy(source, 1, dest, 3, 3); for(int num:dest) { System.out.print(num+" "); } } } ~~~ *** ### 课外习题 1.模拟35选7 ~~~ public class Practice5 { public static void main(String[] args) { // 模拟35选7(没有循环嵌套) boolean bool[] = new boolean[35];// 35个false for(int i = 0;i < 7;i++) { // 生成一个随机数 int random = (int)(Math.random()*35+1);// 5 if(bool[random-1]) { i--; continue; } bool[random-1] = true; } // for(boolean b:bool) { // System.out.print(b+" "); // } for(int i = 0;i < bool.length;i++) { if(bool[i]) { System.out.println(i+1); } } } } ~~~ 2.编写一个简单程序,要求数组长度为5,分别 赋值10,20,30,40,50,在控制台输出该数组的值。 ~~~ public class HomeWork1 { public static void main(String[] args) { // 1、编写一个简单程序,要求数组长度为5,分别赋值10,20,30,40,50,在控制台输出该数组的值。 int arr[] = {10,20,30,40,50}; for(int num:arr) { System.out.println(num); } } } ~~~ 3.给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组 ,先排序,然后输出排序后的数组的值。 ~~~ public class HomeWork3 { public static void main(String[] args) { // 3、给定一个有9个整数(1,6,2,3,9,4,5,7,8)的数组,先排序,然后输出排序后的数组的值。 int arr[] = {1,6,2,3,9,4,5,7,8}; for(int i = 0;i < arr.length - 1;i++) { for(int j = i + 1;j < arr.length;j++) { if(arr[i] < arr[j]) { int temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } for(int num:arr) { System.out.println(num); } } } ~~~ 4.在控制台上输入一个正整数,代表数组长度,然后向数组中输入每一个元素,然后在控制台上遍历出来。 ~~~ public class Practice8 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入要输入几个数字:"); int num = scan.nextInt(); int arr[] = new int[num]; int index = 0; for(int i = 0;i < num;i++) { System.out.println("请输入第"+(i+1)+"个数字"); arr[index] = scan.nextInt(); index++; } for(int n:arr) { System.out.print(n+" "); } } } ~~~ 5.利用数组完成此题:控制台输入一年当中的第几月多少号,输出这天是这一年的多少天。 ~~~ public class Practice9 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("year:"); int year = scan.nextInt(); System.out.println("month:"); int month = scan.nextInt(); System.out.println("date:"); int date = scan.nextInt(); int feb = 28; // 闰年29天 if(year%4==0 && year%100!=0 || year%400==0) { feb = 29; } int days[] = {31,feb,31,30,31,30,31,31,30,31,30,31}; int sum = 0; for(int i = 0;i < month - 1;i++) { sum = sum + days[i]; } System.out.println("第"+(sum+date)+"天"); } } ~~~ 6.随机生成100个1到10的随机数,计算这些数字出现的概率。 ~~~ public class Test { public static void main(String[] args) { int arr[] = new int[10]; for(int i = 0;i < 100;i++){ int random = (int)(Math.random()*6)+1; arr[random-1]++; } for(int i = 0;i < arr.length;i++){ System.out.println(i+1+"出现的概率是"+arr[i]+"%"); } } } ~~~ *** #### 总结: 1.一维,二维数组的定义及遍历; 2.对数组排序(循环嵌套);