Skip to content

Latest commit

 

History

History
187 lines (141 loc) · 3.72 KB

数组.md

File metadata and controls

187 lines (141 loc) · 3.72 KB

数组的三种定义方法

1.动态初始化:声明同时赋值

// Java/数组/Array01.java
import java.util.Scanner;
public class Array01{
    public static void main(String[] args){
        double scores[] = new double[5];

        Scanner myScanner = new Scanner(System.in);
        // 循环从控制台输入值
        for (int i = 0; i < scores.length; i++) {
            System.out.println("输出值");
            scores[i] = myScanner.nextDouble();
        }
        // 遍历输出值
        for (int i = 0; i < scores.length; i++) {
            System.out.println(scores[i]);
        }
    }
}

2.动态初始化:先声明再分配空间

// Java/Array/Array02.java
public class Array02 {
    public static void main(String[] args){
        int arr[];
        arr = new int[10];

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

3.静态初始化,直接枚举值

// Java/Array/Array03.java
int arr[] = {0,1,2,3,4,5};

数组的注意事项📢

1.数组是相同类型的组合

但低精度是可以赋给高精度,因为可以进行隐式转换

double arr[] = {1.2, 3.4, 100};

2.数组中的元素,不能将基本数据类型和引用数据类型混用

3.数组初始化后不赋值,每个元素都会附有默认值

int: 0,  short 0, byte 0, long 0

float: 0.0, double 0.0, char \u0000

boolean false

String null

4.下标越界访问会报出异常

5.数组是引用类型,数组型的数据是对象

数组练习案例

1.输出 26 个英文字母

//Array04.java
public class Array04 {
    public static void main(String[] args){
        char[] chars = new char[26];
        for (int i = 0; i < chars.length; i++) {
            chars[i] = (char)('A'+i);
        }
        for (int i = 0; i < chars.length; i++) {
            System.out.print(chars[i] + " ");
            //A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
        }
    }
}

2.输出数组中的最大值

// Array05.java
public class Array05 {
    public static void main(String[] args){
        int[] arr = {3,4,5,5,9,4};
        int max = arr[0];

        for (int i = 0; i < arr.length; i++) {
            if(max<arr[i]){
                max = arr[i];
            }
        }

        System.out.println(max); // 9
    }
}

数组赋值机制

引用传递,数组赋的值是地址

int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[1]=100;

数组的拷贝

// Array06.java
public class Array06 {
    public static void main(String[] args){
        int[] arr1 = {3,4,5,5,9,4};
        // 需要新开辟一个空间
        int[] arr2 = new int[arr1.length];

        for (int i = 0; i < arr1.length; i++) {
            arr2[i] = arr1[i];
        }
    }
}

数组反转

1.根据下标规律进行数字反转

public class Array07 {
    public static void main(String[] args){
        int[] arr = {3,4,5,5,9,4};
        int len = arr.length;
        int temp = 0;
        for (int i = 0; i < len / 2; i++) {
            temp = arr[len-1-i];
            arr[len-1-i] = arr[i];
            arr[i] = temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
        
    }
}

利用新数组逆序反转

将原数组指向新数组后,原数组会被自动垃圾回收

// Array08.java
public class Array08 {
    public static void main(String[] args){
        int[] arr1 = {3,4,5,5,9,4};
        int[] arr2 = new int[arr1.length];

        for (int i = arr2.length-1, j = 0; i>=0;i--,j++) {
            arr2[j] = arr1[i];
        }
        arr1 = arr2;
    }
}