數組

變量只能存儲一個值,數組可以存儲多個值


沒有字符串類型:本身就沒有字符串數據類型,因爲字符串數據類型長度不確定,沒有辦法制定數據類型大小(還有一點是字符串是一個類)。


Java沒有指針但卻有指針的理論:C語言的字符串採用的是指針製作?  你賦值一串字符串,它會詢問這個字符串有多長就申請多少個char類型連續內存?

                                                  爲什麼需要內存連續呢,因爲指針變量指向的是第一片內存地址,它要按順序向下找


只要是數組操作都是操作的地址,數組傳只用的是引用傳遞。

public class T6 {
    public static void main(String[] args) {
        int a[] = {15, 10, 1};
        int b[] = new int[3];
        b[0]=a[0];
        System.out.println(b[0]);//這裏用的是引用傳遞,傳的是值的地址
    }
}

數組介紹:數組前身就是指針控制,申請連續的內存地址,通過地址控制裏面存儲的數據,連續的內存地址控制。
能讓一個變量存儲多個值,以後經常會使用到數組,但你見不到,很多數據存儲內核都是用數組實現,在Java中數組一旦定製長度不可改變。
string 類型的內核就是數組組成的,以前是char類型的,但是後期優化了byte類型的

public class T6 {
    public static void main(String[] args) {
        int[] i;//這裏只是聲明這是一個數組而已
        int[] i=new int[5];//只是申請了數組,定製了長度
        int[] i={12,3,4,5,76,7,8};//申請了一個int類型的數組,長度由初始值個數決定
        int[] i=new int[]{12312,123,1,23,123,12};//申請了一個int類型的數組,長度由初始值個數決定,這個感覺是沒啥卵用型
        
    }
}

數組的訪問:
                   使用下標訪問,下標從0開始
                   越界? 就是你的下標大於等於數組的長度,小於了0 
                   int[] ints=new int[9];   0~8  有效的下標
                   在聲明的時候可以用變量值代表長度
                   訪問的時候也可以使用變量名 代表下標

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {

        Scanner input=new Scanner(System.in);
        int[] nums=new int[input.nextInt()];
        for(int i=0;i<nums.length;i++){
            nums[i]=input.nextInt();//通過控制檯決定數組長度,並且通過循環選擇下標,並給下標賦值
        }
        for(int i=0;i<nums.length;i++){
            System.out.println(nums[i]);
        }

    }
}
 

數組下標爲什麼從零開始
因爲變量指向的是第一片內存地址,沒有必要向下移動(因爲零代表沒有,代表第一個)
數組的內存結構
例如int類型 是32爲4個字節的 假如有長度爲4的數組類型是int型的
第一個如果是0 第二個地址就是4 第三個就是8 第四個就是12 因爲數組只會就記錄第一個地址(因爲沒必要全記,這是系統操作的)

for循環數組;可以賦值一額可以取值。
                    1.簡單
                    2.用於拿取所有的數值
                    接受數據類型 類型只要能存儲下就可以
public class T6 {
    public static void main(String[] args) {//取值實驗
    int i[]={15,13,35,64,65,48};
        for (int j = 0; j <i.length ; j++) {
            System.out.print(i[j]+"\t");
        }
    }
}

import java.util.Scanner;

public class T6 {
    public static void main(String[] args) {//取值實驗
        int i[] = new int[3];
        Scanner input = new Scanner(System.in);
        for (int j = 0; j <i.length ; j++) {//這裏是賦值
            System.out.println("請您輸入數字");
           i[j]=input.nextInt(); 
        }
        for (int j = 0; j <i.length ; j++) {
            System.out.print(i[j]+"\t");//有賦值那肯定得有取值 
        }
    }
}
Arrays 數組操作類:sort(基本數據類型數組都可以找它排序 ,toString(數組變量) 把數組打印出來

import java.util.Arrays;
public class T6 {
    public static void main(String[] args) {//取值實驗
        int i[] = {15, 20, 6};
        Arrays.sort(i);//這裏是排序
        for (int j = 0; j <i.length ; j++) {
            System.out.println(i[j]);//這裏是取值
        }
        System.out.println(Arrays.toString(i));//也可以這樣取值
    }
}

數組引用:引用?  就是指針的理論 指向別人的地址
                 引用?  除了基本數據類型 其他的都是引用
                 除了基本數據類 其他的交換都是內存地址

隨機數:Math.random()  出來的值是 0.0~1 範圍內的 double值


public class T6 {
    public static void main(String[] args) {
        int i[] = {15, 36, 56, 48, 21};
        int a = (int) (Math.random() * i.length);//隨機拿出一個下標
        System.out.println(i[a]);

    }
}



二維數組:
              數組嵌套,數組中嵌套數組,數組中引用數組
              c語言的二維數組的內存是連續的,java中內存不是連續,使用引用操作的
             二維數組,是一張表  有行有列

public class T6 {
    public static void main(String[] args) {
        int b[][] = {{}, {}};//聲明二維數組格式
        int a[][] = {{1, 5, 354, 16, 1}, {15, 645, 13, 354, 1}, {15, 64, 21, 1}, {35, 15, 32, 5, 2}};
        
    }
}

二維數組排序

import java.util.Arrays;

public class T6 {//二維數組排序例題

    public static void main(String[] args) {
        int b[];
        int a[][] = {{1, 5, 354, 16, 1}, {15, 645, 13, 354, 1}, {15, 64, 21, 1}, {35, 15, 32, 5, 2}};
        int length = 0;//定義一個變量計算數組所需要的下標長度
        for (int i = 0; i < a.length; i++) {
            length += a[i].length;
        }
        b = new int[length];//決定一維數組的長度
        int index = 0;//聲明下標從零開始
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                b[index++] = a[i][j];//將二維數組的值賦值給一維數組
            }
        }
        Arrays.sort(b);//將二維數組賦值給的一維數組的值,進行排序。
        length=0;//在這聲明從零開始,下標
        for (int[] num : a) {
            for (int i = 0; i <num.length ; i++) {
               num[i]=b[length++];//將排序好的一維數組值,賦值給二維數組
            }
        }
        for (int i = 0; i < a.length; i++) {
            for (int i1 : a[i]) {
                System.out.println(i1);
            }
        }
    }
}


import java.util.Scanner;

public class Test9 {//一個用循環決定下標數的值的實驗

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        int[] select = new int[100];
        int index = 0;//先控制下標從零開始

        while (true) {
            System.out.println("1.葡萄");
            System.out.println("2.香蕉");
            System.out.println("3.黃瓜");
            System.out.println("4.苦瓜");
            System.out.println("5.退出");
            System.out.print("請選擇:");
            int s = input.nextInt();
            if (s == 5) {
                break;
            }
            select[index++] = s;//這裏選擇數字進行累計,並賦值給一維數組
        }

        System.out.println("您選擇的是:");
        for (int i = 0; i < select.length; i++) {
            if (select[i] == 0) {
                break;
            }
            if (select[i] == 1) {
                System.out.println("葡萄");
            } else if (select[i] == 2) {
                System.out.println("香蕉");
            } else if (select[i] == 3) {
                System.out.println("黃瓜");
            } else if (select[i] == 4) {
                System.out.println("苦瓜");
            }
        }

    }
}


public class T6 {//二維數組隨機數實驗
    public static void main(String[] args) {
        int a[][] = {{1, 54, 56, 54}, {485, 354, 321, 546, 1}, {5, 464, 8, 243, 44, 5}};
        int i = (int) (Math.random() * a.length);
        int b = (int) (Math.random() * a[i].length);
        System.out.println(a[i][b]);
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章