数组

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     }
View Code

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     
View Code

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     }
View Code

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     }
View Code

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     }
View Code

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;
                }
            }
        }
    }
View Code

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     }
View Code

数组反转:

 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     } 
View Code

合并数组:

 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     }
View Code

数组增删改查:

  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 }
View Code

之前讲的数组是一维数组,实际还有二维数组和多维数组。

二维数组和多维数组不常用。

二维数组:是由多个一维数组组成。
二维数组的每一个元素是一个一维数组。
数组.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}};

 

posted on 2019-04-16 21:11  weixg_p  阅读(134)  评论(0编辑  收藏  举报