数组
1.遍历
1 /* 2 遍历 3 */ 4 public static void show(int[] arr){ 5 for(int i = 0; i < arr.length; i++){ 6 //arr[i]代表每一个元素 7 System.out.print(arr[i] + "\t"); 8 } 9 System.out.println(); 10 }
2.循环输入
1 // 循环输入 2 public static void inputScore(int[] arr){ 3 Scanner input = new Scanner(System.in); 4 for(int i = 0; i < arr.length; i++){//i代表下标 5 //arr[i]代表每一个元素 6 System.out.println("请输入" + (i+1) + "名同学的成绩:"); 7 arr[i] = input.nextInt();//每一个元素赋值 8 } 9 } 10
3.求和和平均值
1 // 求数组元素的和 和平均值 2 public static void getSumAvg(int[] arr){ 3 int sum = 0;//和 4 for(int i = 0; i < arr.length; i++){//i代表下标 5 //arr[i]代表每一个元素 6 sum += arr[i];//把每一个元素加起来 7 } 8 System.out.println("和为:" + sum); 9 System.out.println("平均分为:" + sum*1.0/arr.length); 10 }
4.最值以及下标
1 // 求数组中的最值以及最值的下标 2 public static void getMost(int[] arr){ 3 int max = arr[0]; //假设第一个元素为最大值 4 int min = arr[0]; //假设第一个元素为最小值 5 int maxIndex = 0; //最大值的下标 6 int minIndex = 0; //最小值的下标 7 for(int i = 0; i < arr.length; i++){ 8 //arr[i]为每一个元素 9 if(max < arr[i]){ 10 //如果该元素大于最大值,最大值需要重新赋值 11 max = arr[i]; 12 maxIndex = i;//最大下标重新赋值 13 } 14 if(min > arr[i]){ 15 //如果该元素小于最小值,最小值需要重新赋值 16 min = arr[i]; 17 minIndex = i;//最小下标重新赋值 18 } 19 } 20 System.out.println("最大值为:" + max + ",下标为:" + maxIndex); 21 System.out.println("最小值为:" + min + ",下标为:" + minIndex); 22 }
5.求某元素在数组中的下标
6.冒泡排序
1 /* 2 冒泡排序 3 */ 4 public static void sort(int[] arr){ 5 for(int i = 0; i < arr.length-1; i++){ 6 for(int j = 0; j < arr.length-i-1;j++){ 7 if(arr[j] > arr[j+1]){ 8 int temp = arr[j]; 9 arr[j] = arr[j+1]; 10 arr[j+1] = temp; 11 } 12 } 13 } 14 }
7.选择排序
// 选择排序: public static void sort2(int[] arr){ /* i控制比赛轮数 i代表主角的下标 */ for(int i = 0; i < arr.length -1; i++){//控制比赛轮数 /* if(主角 > 配角){ 换位置 } j为配角的下标 */ for(int j = i+1; j < arr.length; j++){//控制比赛次数 if(arr[i] > arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] =temp; } } } }
8.二分查找
1 /* 2 二分查找、折半查找 3 在数组元素有序(升序、降序)的情况下,查找某元素在数组 4 中的下标 5 11 22 33 44 55 66 77 88 99 100 6 7 70 8 9 小 大 中 10 0 9 4-55 11 5 9 7-88 12 5 6 5-66 13 6 6 6-77 14 6 5 不存在!! 15 */ 16 public static int binarySearch(int[] arr,int key) { 17 int minIndex = 0; //最小下标 18 int maxIndex = arr.length-1;//最大下标 19 int midIndex = (minIndex + maxIndex)/2;//中间元素下标 20 while(arr[midIndex] != key) { 21 if(arr[midIndex] > key) { 22 /*如果中间元素大于key,包括中间值后面的所有 23 都不再考虑。 24 最大下标重新赋值:为中间下标-1 25 */ 26 maxIndex = midIndex - 1; 27 } 28 if(arr[midIndex] < key) { 29 /* 30 如果中间元素小于key,那么包括中间之在内的前面 31 所有都不再考虑 32 最小下标需要重新赋值:为中间下标+1 33 */ 34 minIndex = midIndex +1; 35 } 36 if(maxIndex < minIndex) {//最大下标小于最小下标,错了! 37 return -1; 38 } 39 //新的一组数字的中间下标 40 midIndex = (minIndex + maxIndex)/2; 41 } 42 return midIndex; 43 }
数组反转:
1 /* 2 反转数组中元素 3 */ 4 public static void reverse(int[] arr){ 5 for(int i = 0; i < arr.length/2; i++){ 6 //主角和配角换位置,i代表主角的下标 7 //arr[i] 配角 arr[arr.length-1-i] 8 int temp = arr[i]; 9 arr[i] = arr[arr.length-1-i]; 10 arr[arr.length-1-i] = temp; 11 } 12 }
合并数组:
1 // 合并数组 2 public static int[] all(int[] a,int[] b){ 3 int[] c = new int[a.length + b.length]; 4 for(int i = 0; i < a.length; i++){//把a数组中元素进行赋值 5 //i代表数组a的下标,也代表c的下标 6 c[i] = a[i]; 7 } 8 for(int i = 0; i<b.length ; i++){//把b数组中的元素赋值给c 9 //i代表数组b的下标 10 c[a.length + i] = b[i]; 11 } 12 return c; 13 }
数组增删改查:
1 public class Demo{ 2 public static void main(String[] args){ 3 String[] apps = {"美团","微信","QQ","淘宝","计算器","冲顶大会",null}; 4 show(apps); 5 add(apps,"支付宝"); 6 show(apps); 7 add(apps,"京东"); 8 show(apps); 9 System.out.println(".............................."); 10 modify(apps,"QQ","默默"); 11 show(apps); 12 modify(apps,"哈哈","默默"); 13 show(apps); 14 System.out.println("~~~~~~~~~~~~~~~"); 15 remove(apps,"计算器"); 16 show(apps); 17 remove(apps,"微信"); 18 show(apps); 19 remove(apps,"哈哈"); 20 show(apps); 21 } 22 //增删改查 23 //删除 24 public static void remove(String[] strs,String app){ 25 System.out.println("-------删除元素-------"); 26 //查找app的下标 27 int index = -1; 28 for(int i = 0; i < strs.length; i++){ 29 if(app.equals(strs[i])){ 30 index = i; 31 break; 32 } 33 } 34 //oldApp的下标index 35 if(index != -1){//存在,可以删除 36 for(int i = index; i < strs.length; i++){ 37 if(i == strs.length-1){//此时为最后一个元素 38 strs[i] = null; 39 break; 40 } 41 //后面赋值给前面 42 strs[i] = strs[i+1]; 43 } 44 System.out.println("删除" + app + "成功"); 45 }else{//不存在 不可以删除 46 System.out.println("删除" + app + "失败!不存在"); 47 } 48 } 49 //修改 50 public static void modify(String[] strs,String oldApp,String newApp){ 51 System.out.println("-------修改元素------"); 52 //查找oldApp的下标 53 int index = -1;//oldApp的下标 54 for(int i = 0; i < strs.length; i++){ 55 if(oldApp.equals(strs[i])){ 56 index = i;//下标重新赋值 57 break; 58 } 59 } 60 //index为oldapp的下标 61 if(index != -1){//存在 62 strs[index] = newApp;//给oldApp元素所在下标重新赋值 63 System.out.println("修改成功!"); 64 }else{//不存在 65 System.out.println("修改失败!" + oldApp + "不存在"); 66 } 67 } 68 //增加 69 public static void add(String[] strs,String app){ 70 System.out.println("--------添加元素---------"); 71 if(strs[strs.length-1] == null){//证明至少有一个为null 72 for(int i = 0; i < strs.length; i++){ 73 if(strs[i] == null){//找到第一个空位了 74 strs[i] = app;//空位重新赋值 75 break; 76 } 77 } 78 System.out.println("添加" + app + "成功"); 79 }else{ 80 System.out.println("添加" + app + "失败!没有空位"); 81 } 82 } 83 /* 84 public static void add(String[] strs,String app){ 85 System.out.println("--------添加元素---------"); 86 //查找第一个null的下标。 87 int index = -1;//null的下标 88 for(int i = 0; i < strs.length; i++){ 89 //strs[i]每一个元素 90 if(strs[i] == null){ 91 index = i; 92 break; 93 } 94 } 95 //index --->null的下标 96 if(index != -1){//存在 97 //给null的元素进行重新赋值 98 strs[index] = app; 99 System.out.println("添加" + app + "成功"); 100 }else{//index=-1,证明没有被重新赋值,null不存在 101 System.out.println("添加" + app + "失败!没有空位"); 102 } 103 } 104 */ 105 106 //查:遍历 107 public static void show(String[] strs){ 108 System.out.println("----------遍历--------"); 109 for(int i = 0; i < strs.length; i++){ 110 System.out.print(strs[i] + "\t"); 111 } 112 System.out.println(); 113 System.out.println("----------------------"); 114 } 115 }
之前讲的数组是一维数组,实际还有二维数组和多维数组。
二维数组和多维数组不常用。
二维数组:是由多个一维数组组成。
二维数组的每一个元素是一个一维数组。
数组.length:
二维数组的长度为元素的个数,也就是一维数组的个数。
1.声明一个二维数组,并给其所有一维数组开辟内存空间
数据类型[][] 数组名 = new 数据类型[元素的个数][每一个一维数组的长度];
int[][] arr = new int[3][4];
当前数组包括3个一维数组,每一个一维数组长度为4
2.声明一个二维数组,不给其中的一维数组开辟内存空间
数据类型[][] 数组名 = new 数据类型[元素的个数][];
int[][] arr2 = new int[3][];
需要手动给每一个一维数组开辟内存空间。
3.声明一个二维数组,给一维数组开辟内存空间并赋值
数据类型[][] 数组名 = new 数据类型[][]{{值,值..},{值,值..} ,{值,值..} ..... };
int[][] arr3 = new int[][]{{1,2,3},{10,20,30,40,50},{100,200,300,400}};
4.声明一个二维数组,给一维数组开辟内存空间并赋值
数据类型[][] 数组名 = {{值,值..},{值,值..} ,{值,值..} ..... };
int[][] arr4 = {{1,2,3,4},{10,20,30},{100,200,300,400}};