java基础05_java基础-数组

165 阅读1分钟

1.数组概述

image.png

2.初始化和默认值

                //静动态初始化
		int[] ids = new int[] {001,002,003,004,005};
		String[] names = new String[3];
	
		
		names[0] = "mk";
		names[1] = "mk1";
		names[2] = "mk2";
		//names[3] = "mk";//Index 3 out of bounds for length 3
		
		System.out.println("ids长度:"+ids.length);
		System.out.println("names长度:"+names.length);
		
		System.out.println("遍历ids:");
		for ( int i=0; i<ids.length; i++ ) {
			System.out.println(ids[i]);
			}
		
		System.out.println("遍历arrint:");
		int[] arrint = new int[4];
		for ( int i=0; i<arrint.length; i++ ) {
			System.out.println(arrint[i]);
			//0000
			}
		
		System.out.println("遍历arrlong:");
		long[] arrlong = new long[2];
		for ( int i=0; i<arrlong.length; i++ ) {
			System.out.println(arrlong[i]);
			//00
			}
		
		System.out.println("遍历arrfloat:");
		float[] arrfloat = new float[2];
		for ( int i=0; i<arrfloat.length; i++ ) {
			System.out.println(arrfloat[i]);
			//0.0  
			}
		
		System.out.println("遍历arrchar:");
		char[] arrchar = new char[2];
		for ( int i=0; i<arrchar.length; i++ ) {
			System.out.println("---"+arrchar[i]+"---");
			//空格但是是0,非'0':--- ---
			}
		if(arrchar[0] == 0) {
			System.out.println("是0~!");
		}
		
		
		System.out.println("遍历arrboolean:");
		boolean[] arrboolean = new boolean[5];
		for ( int i=0; i<arrboolean.length; i++ ) {
			System.out.println(arrboolean[i]);
			//false  
			}
		
		System.out.println("遍历arrString:");
		String[] arrString = new String[1];
		for ( int i=0; i<arrString.length; i++ ) {
			System.out.println(arrString[i]);
			//null
		if(arrString[0] == null) {
				System.out.println("是null~!");
				}	
			
			}

3.内存结构

image.png

image.png

4.二维

初始化:外层地址,内层和一维一样

    System.out.println("遍历二维arr:");
    int[][] arr = new int[3][4];
    System.out.println(arr);//[[I@53bd815b
    System.out.println(arr[2]);//[I@2401f4c3
    System.out.println(arr[1][3]);//0


    System.out.println("遍历二维arrdouble:");
    double[][] arr1 = new double[3][];
    System.out.println(arr1);//double
    System.out.println(arr1[2]);//[I@2401f4c3
    //System.out.println(arr1[1][3]);//报错:Cannot load from double array because "arr1[1]" is null



    System.out.println("遍历二维arrString:");
    String[][] arr2String = new String[3][4];
    System.out.println(arr2String);//[[Ljava.lang.String;@7637f22
    System.out.println(arr2String[2]);//[Ljava.lang.String;@4926097b
    System.out.println(arr2String[1][3]);//null

5.练习

5.1一维

        public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = new int[]{8,2,1,0,3};//组成电话号码的数
		int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
		String tel = "";
		for(int i = 0;i < index.length;i++){
		tel += arr[index[i]];
		}
		System.out.println("联系方式:" + tel);
		//联系方式:18013820100
	}

6.应用

6.1算法:数组元素的赋值(杨辉三角、回形数等)

使用二维数组打印一个10行杨辉三角。

  1. 第一行有 1 个元素, 第 n 行有 n 个元素

  2. 每一行的第一个元素和最后一个元素都是 1

  3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。即:

yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];

        public static void main(String[] args) {
        //声明,赋值,遍历
        int[][] yangHui = new int[10][];

        for(int i = 0;i<yangHui.length;i++) {
          yangHui[i] = new int[i+1];
          yangHui[i][0]=yangHui[i][i]=1;

          //if(i>1) {
                  for(int j = 1;j < yangHui[i].length-1;j++) {
                          yangHui[i][j] =  yangHui[i-1][j-1] + yangHui[i-1][j];
                //  }
          }
        }

        for(int i = 0;i<yangHui.length;i++) {
                for(int j = 0;j<yangHui[i].length;j++) {

                  System.out.print(yangHui[i][j]+" ");
                }  
                System.out.println();
        }

6.2算法:求数值型数组中元素的最大值、最小值、平均数、总和等

定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。

要求:所有随机数都是两位数。

提示:[0,1) * 90-->[0,90) + 10 --> [10,100) -->[10,99]

(int)(Math.random() * 90 + 10)

public static void main(String[] args) {
		
        int arr[] = new int[10];
        for(int i = 0;i<arr.length;i++) {
                  arr[i] = (int)(Math.random()*90+10);
                }  
        for(int i = 0;i<arr.length;i++) {
                System.out.print(arr[i]+"\t");			
                }	
        System.out.println();		

        int maxValue = arr[0];
        for(int i = 0;i<arr.length;i++) {
                if(maxValue < arr[i]) {
                        maxValue = arr[i];
                }				
        }	
        System.out.println("最大值为:"+maxValue);
}

6.3算法:数组的复制、反转、查找(线性查找、二分法查找)

1.复制。

使用简单数组

(1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。

(2)使用大括号{},把array1初始化为8个素数2,3,5,7,11,13,17,19。

(3)显示array1的内容。

(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值。(如array[0]=0,array[2]=2)。打印出array1。

public static void main(String[] args) {
        /*
         *  (1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。

                (2)使用大括号{},把array1初始化为8个素数2,3,5,7,11,13,17,19。

                (3)显示array1的内容。

                (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值。(如array[0]=0,array[2]=2)。打印出array1。
                */
        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]+"\t");			
                }


        //array2 = array1;//不能叫做数组赋值。小名儿的意思
        array2 = new int[array1.length];
        for(int i = 0;i<array2.length;i++) {
                array2[i] = array1[i] ;		
    }

        for(int i = 0;i<array2.length;i++) {
                        if(i % 2 == 0) {
                                array2[i] = i;
                        }		
                }
        System.out.println();			
        System.out.println("**********************************************************");			

        System.out.println("array1:");			
        for(int i = 0;i<array1.length;i++) {
                System.out.print(array1[i]+"\t");			
                }

        //2	3	5	7	11	13	17	19
        System.out.println();			

        System.out.println("array2:");			
        for(int i = 0;i<array2.length;i++) {
                System.out.print(array2[i]+"\t");			
                }
        //0	3	2	7	4	13	6	19
}

思考:array1和array2是什么关系?

大名小名的关系

拓展:修改题目,实现array2对array1数组的复制

行。

2.反转。

    public static void main(String[] args) {
        /*逆序*/
        String[] array1,array2;//2用来验证,可有可无
        array1 = new String[] {"A","B","C","D","E","F","G","H","I"};
        array2 = new String[array1.length];
        for(int i = 0;i<array1.length;i++) {
                System.out.print(array1[i]+"\t");
                array2[i] = array1[i] ;	
                }



        for(int i = 0;i<array1.length / 2;i++) {
                String temp = array1[i];
                array1[i] = array1[array1.length - 1 - i];
                array1[array1.length - 1 - i] = temp;
                }

        System.out.println();
        System.out.println("array1:");
        for(int i = 0;i<array1.length;i++) {
                System.out.print(array1[i]+"\t");
                }
        System.out.println();
        System.out.println("array2:");
        for(int i = 0;i<array2.length;i++) {
                System.out.print(array2[i]+"\t");
                }
		
    }

3.线性查找。

public static void main(String[] args) {
        /*查找*/
        String[] array1;
        array1 = new String[] {"A","B","C","D","E","F","G","H","I"};

        System.out.println("array1:");
        for(int i = 0;i<array1.length;i++) {
                System.out.print(array1[i]+"\t");
                }
        System.out.println();

        Scanner input = new Scanner(System.in);
        System.out.println("请输入要查找的元素:");
        String dest = input.next();

        boolean isFlag = true;
        for(int i = 0;i<array1.length;i++) {
                if(dest.equals(array1[i])) {//equals和==的区别!!!

                        System.out.print("恭喜!找到了该元素,其位置为:"+ i );
                        isFlag = false;
                        break;
                }
        }
        if(isFlag) {
                System.out.print("抱歉!没有找到该元素~");
        }
}

4.二分查找。

public static void main(String[] args) {
    /*二分查找。有序*/
    int array1[] = new int[] {-50,-33,-21,0,7,6,34,60,81,100,};

    System.out.println("array1:");
    for(int i = 0;i<array1.length;i++) {
            System.out.print(array1[i]+"\t");
            }
    System.out.println();




    Scanner input = new Scanner(System.in);
    System.out.println("请输入要查找的元素:");
    int dest = input.nextInt();

    int start = 0;
    int end = array1.length - 1;

    boolean isFlag = true;

    while(start <= end) {

            int middle = (start + end)/2;

            if(dest == array1[middle]) {
                    System.out.print("恭喜!找到了该元素,其位置为:"+ middle );
                    isFlag = false;
                    break;
            }
            else if(dest < array1[middle]) {
                    end = middle - 1;
                    //middle = (start + end)/2;
            }else  {
                    start = middle + 1;
                    //middle = (start + end)/2;
            }

    }
    if(isFlag) {
            System.out.println("抱歉!没有找到该元素~");

    }
		
}

6.4算法:数组元素的排序算法

6.4.1冒泡排序

public static void main(String[] args) {
        /*冒泡排序*/
        int array[] = new int[] {50,-33,21,0,-7,6,34,60,-81,100,};

        System.out.println("array:");
        for(int i = 0;i<array.length;i++) {
                System.out.print(array[i]+"\t");
                }
        System.out.println();


        //这儿
        for(int i = 0;i<array.length - 1;i++) {
                for(int j = 0;j<array.length - 1 - i;j++) {
                        if(array[j] > array[j+1]) {
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        }
                        }
                }



        System.out.println("array:");
        for(int i = 0;i<array.length;i++) {
                System.out.print(array[i]+"\t");
                }
        System.out.println();
}

6.4.2快速排序

public class ArrayQuickSortTest {
 //快排
    public static void main(String args[]) {
    	int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
		System.out.println("原来的:" + java.util.Arrays.toString(data));
		quickSort(data,0,data.length-1);
		System.out.println("快排后的:" + java.util.Arrays.toString(data));
    }
 
    public static void quickSort(int[] data, int start, int end) {
    	
        if(start > end) {
            return;
        }
        
    	int base = data[start];
        int low = start;
        int high = end;

        while(low < high) {

                while (low < high && data[high] >= base)
                        {
                            high--;
                        }
                //交换low,high
                int temp = data[low];
                data[low] = data[high];
                data[high] = temp;

                while (low < high && data[low]  <= base)
                        {
                            low++;
                        }
                temp = data[high];
                data[high] = data[low];
                data[low] = temp;			
                }

                base = data[low];
                quickSort(data, start, low - 1);//
                quickSort(data, low + 1, end);
    	
    }

}

6.4.3Array工具类

image.png