喧啸

导航

数组进阶----算法中的数组

数组中涉及到的常见的算法和其他问题

一、数组元素的赋值(杨辉三角、回行数)

  杨辉三角

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();
        }
    }

}

 

  回行数

 

二、数值中数组中元素的最大值,最小值,平均数、总和

package com.xunaxiao.array;

public class ArrayTest10 {
    public static void main(String[] args) {
        /*
         * 定义一个int型的一维数组,包含10个元素,分别赋值一下随机整数
         * 然后求出所有元素的最大值,最小值,和值,平均值。
         * 要求:所有整数都是两位是
         */
        int[] array = new int[10];
        for(int i= 0;i<array.length;i++) {
            array[i] = (int)(Math.random() * 90 + 10);
        }
        for(int i= 0;i<array.length;i++) {
            System.out.print(array[i] + " ");
        }
        int max = array[0];
        int min = array[0];
        int sum = 0;
        for(int i = 1;i < array.length; i++) {
            if(max < array[i]) {
                max = array[i];
            }
            if(array[i] < min) {
                min = array[i];
            }
            sum += array[i];
        }
        double average = sum / array.length;
        System.out.println("所有元素的最大值为:" + max);
        System.out.println("所有元素的最小值为:" + min);
        System.out.println("所有元素的和值为:" + sum);
        System.out.println("所有元素的平均值为:" + average);
    }
}

 

三、数组的复制,反转,查找(线性查找、二分法查找)

  1.数组的复制

package com.xunaxiao.array;

public class ArrayTest5 {
    public static void main(String[] args) {
        /*
         * 使用简单的数组
         * 1.在main方法中声明array1和array2两个变量,他们是int类型的数组
         * 2.使用静态初始化方法初始8个素数:2,3,5,7,11,13,17,19
         * 显示array1的内容
         * 赋值array2变量等于array1;修改array的偶索引元素,使其等于索引值(array[0] = 0,array[2] = 2),打印array1
         *
         * array1和array2地址值相同,都指向了堆空间唯一的一个数组实体;
         * 实现真正的复制:array2 = new int[array1.length];
         */
        
        int[] array1,array2;
        array1 = new int[]{2,3,5,7,11,13,17,19};
        for(int i = 0;i<array1.length;i++) {
            System.out.print(array1[i] + " ");
        }
        System.out.println();
        array2 = array1;
        for(int j = 0;j<array2.length;j++) {
            if(j % 2 == 0) {
                array2[j] = j;
            }
        }
        for(int i = 0;i<array1.length;i++) {
            System.out.print(array1[i] + " ");
        }
    }
}

  2.数组的反转

package com.xunaxiao.array;

public class ArrayTest6 {
    public static void main(String[] args) {
        String[] array= new String[]{"JJ","DD","MM","BB","GG","AA"};
        String[] array1 = new String[array.length];
        for(int i = 0;i <array.length;i++) {
            array1[i] = array[i];
        }
        
        //数组的反转
        for(int j = 0;j<array.length /2;j++) {
            String temp = array[j];
            array[j] = array[array.length-1-j];
            array[array.length-1-j] = temp;
        }
        //还可以设置两个变量,一个从前一个从后进行遍历
        
        for(int i = 0;i<array.length;i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }
}

  3、数组的查找

    线性查找

package com.xunaxiao.array;

public class ArrayTest7 {
    public static void main(String[] args) {
        
        String[] array= new String[]{"JJ","DD","MM","BB","GG","AA"};
        String desk = "CB";
        boolean sysbol = true;
        
        for(int i = 0;i<array.length;i++) {
            if(desk == array[i]) {
                System.out.println("元素的下标是:" + i);
                sysbol = false;
                break;
            }
        }
        if(sysbol) {
            System.out.println("未能找到元素");
        }
    }
}

 

    二分法查找

      使用情况:进行查找的数组是有序的

package com.xunaxiao.array;

public class ArrayTest8 {
    public static void main(String[] args) {
        
        int[] numbers = new int[]{-98,-58,-2,8,16,58,67,99};
        int desk = -1;
        int middle,first,end;
        first = 0;
        end = numbers.length - 1;
        while(first <= end) {
            middle = (first + end) / 2;
            if (desk == numbers[middle]) {
                System.out.println("元素下标是:" + middle);
                break;
            }else if(desk <= numbers[middle]) {
                end = middle-1;
            }else {
                first = middle +1;
            }
        }
        System.out.println("未能找到元素");
    }
}

 

四、数组元素的排序算法

  冒泡排序

package com.xunaxiao.array;

public class ArrayTest9 {
    /*
     * 冒泡排序
     * 
     */
    public static void main(String[] args) {
        int[] numbers = new int[]{12,34,75,86,4,24,56,77,99};
        for(int i = 0;i<numbers.length;i++) {
            for(int j = 0;j<numbers.length-1-i;j++) {
                if(numbers[j] < numbers[j+1]) {
int temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; } } } for(int i = 0;i<numbers.length;i++) { System.out.print(numbers[i] + " "); } } }

 

  快速排序

五、Arrays工具类的使用

  • boolean equals(int[ ] a,int[ ] b)         作用:判断两个数组是否相等。
  • String to String(int[ ] a)               作用:输出数组信息。
  • void fill(int [ ] a,int val)                      作用:将指定值填充到数组之中。
  • void sort(int [ ] a)                              作用:对数组进行排序。
  • int binarySearch(int[ ] a, int key)      作用:对排序后的数组进行二分法查找。

六、数组中的常见异常

  • 数组下标越界的异常:ArrayIndexOutOfBoundsException
  • 空指针异常:NullPointerException
package com.xunaxiao.array;

public class ArrayTest11 {
    public static void main(String[] args) {
        //数组下标越界异常
        int[] array = new int[]{2,5,8,10};
//        System.out.println(array[-1]);
        System.out.println(array[5]);
        
        //空指针异常
        
        //情况一:
        int[] array1 = new int[]{1,2,3};
        array1 = null;
        System.out.println(array1[0]);
        
        //情况二:
        int[][] array2 = new int[4][];
        System.out.println(array2[0][0]);
        
        //情况三:
        String[] array3 = new String[]{"Aa","Bb","Cc"};
        array3[0] = null;
        System.out.println(array3[0].toString());
    }

}

 

posted on 2020-10-29 23:27  喧啸  阅读(61)  评论(0编辑  收藏  举报