6-Java基礎語法-陣列之一維陣列

dunne21發表於2021-09-09

陣列

為什麼要使用陣列?

學生成績排序問題

圖片描述

如果沒有陣列,我們得定義30個變數。

陣列是相同型別的資料按順序組成的一種引用資料型別

要學習的內容:

  • 一維陣列: 宣告 建立 初始化 元素的引用 長度 陣列的應用

陣列的概念

陣列宣告語法格式:

資料型別[] 陣列名;
資料型別 陣列名[]; //和c等一致的形式int[] myIntArray;int myIntArray[];char[] ch;
String[] strArray;//字串是一個類,這是物件陣列。

變數宣告的語法格式:

資料型別 變數名;

資料型別後加上了中括號。命名規範上第一個單詞首字母小寫,之後單詞首字母大寫。

陣列的建立:

語法格式一:先宣告後建立

資料型別[] 陣列名;
陣列名 = new 資料型別[陣列長度]; // new是在建立一個物件,這裡是建立一個陣列int[] arr;
arr= new int[10]; // 建立一個長度為10的整型陣列

語法格式二:宣告的同時建立陣列

資料型別[] 陣列名= new 資料型別[陣列長度];int[] arr= new int[10]; // 建立長度為10的整型陣列arr

注意:陣列建立時長度必須指定

陣列在記憶體中的儲存

陣列會被分配連續的記憶體空間

int[] a=new int[5];

圖片描述

預設值都為0。陣列名是一個物件,指向陣列中的第一個元素。

圖片描述

區域性變數和陣列的預設值問題: 區域性變數是沒有預設值的,如果沒有初始化,是記憶體中的隨機值。而陣列是有預設值的0的,因為陣列本身是物件。

陣列的初始化: 宣告陣列的同時給陣列賦值,叫做陣列的初始化。

例子:

int[] arr={1,2,3,4,5,6,7,8,9,10};

陣列的長度就是初始化時所給陣列元素的個數

陣列元素的引用

語法格式:

陣列名[下標];

注意:下標從0開始

int[] arr={1,2,3,4,5,6,7,8,9,10};

圖片描述

連續的記憶體空間當中儲存陣列的值

圖片描述

變數名 和 變數值的關係

陣列的長度:

int[] arr={1,2,3,4,5,6,7,8,9,10};// 屬性length表示陣列的長度,如a.length

一維陣列的應用

package cn.mtianyan.array;public class ArrayDemo {    public static void main(String[] args) {        // 宣告陣列
        int[] intArray;
        String strArray[];        // 建立陣列
        intArray = new  int[5];
        strArray = new String[10];        // 宣告陣列的同時進行建立
        float[] floatArray = new float[4];        // 初始化陣列
        char[] ch = {'a','b','c','d'};
        System.out.println("ch陣列的長度為: "+ch.length);        // 陣列預設值
        char[] charArray = new char[5];
        System.out.println("intArray陣列的第二個元素為: "+intArray[1]);
        System.out.println("strArray陣列的第五個元素為: "+strArray[4]);
        System.out.println("floatArray的最後一個元素為:"+floatArray[floatArray.length-1]);
        System.out.println("charArray的第一個元素為: "+charArray[0]+"End");
    }
}

圖片描述

所有物件陣列都像strArray一樣在建立時預設值為null;使用迴圈對整型陣列賦值。

        // 迴圈為整型陣列賦值
        for (int i=0;i<5;i++){
            intArray[i] = i+1;
        }
        System.out.println("整型陣列intArray的元素為: ");        for (int i=0;i<5;i++){
            System.out.print(intArray[i]+" ");
        }

圖片描述

陣列下標越界,會報出異常。ArrayIndexOutOfBoundsException(執行時異常) 陣列下標越界異常。

求陣列元素的累加和

定義一個整型陣列,從鍵盤接收輸入值,然後求累加和。

package cn.mtianyan.array;import java.util.Scanner;public class ArrayAddDemo {    public static void main(String[] args) {        int[] intArray = new int[5];
        System.out.println("請輸入五個陣列的元素,輸入0為計算前面幾個輸入值,只輸入0退出程式:");
        Scanner scanner = new Scanner(System.in);        int sum=0;        while (true) {
            sum = 0;            for (int i = 0; i < 5; i++) {
                intArray[i] = scanner.nextInt();                if (intArray[i] == 0) break;
                sum = sum + intArray[i];
            }            if (sum==0) break;
            System.out.println("sum:" + sum);
        }
    }
}

圖片描述

package cn.mtianyan.array;import java.util.Scanner;public class ArrayDemo1 {    public static void main(String[] args) {        int[] a = new int[5];
        Scanner scanner = new Scanner(System.in);        for (int i=0;i<a.length;i++){
            System.out.print("請輸入第"+(i+1)+"個元素: ");
            a[i] = scanner.nextInt();

        }
        System.out.println();
        System.out.println("陣列元素的內容為: ");        for (int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }
}

圖片描述

        int sum=0;        for (int i=0;i<a.length;i++){
            sum +=a[i];
        }
        System.out.println("陣列累加和為: "+sum);

圖片描述

程式設計練習

求陣列中能被3整除的元素並列印輸出。

效果圖:

圖片描述

任務:

  1. 定義一個整型陣列a並初始化

  2. 迴圈遍歷陣列,找出能被3整除的元素並列印輸出

package cn.mtianyan.array;public class ArrayExercise {    public static void main(String[] args) {        int[] a ={1,2,6,12,15,16,17};

        System.out.println("能被3整除的陣列元素為:");        for (int i=0;i<a.length;i++){            if (a[i] % 3==0){
                System.out.println(a[i]);
            }
        }
    }
}

圖片描述

求陣列元素的最大值

package cn.mtianyan.array;public class ArrayMaxDemo {    public static void main(String[] args) {        // 求陣列元素最大值
        int[] a ={1,2,6,12,35,16,17};        int max = 0;        for (int i=0;i<a.length;i++){            if(a[i]>max){
                max = a[i];
            }
        }
        System.out.println("max:" +max);
    }
}

圖片描述

最佳化: max 之間等於a[0] 然後迴圈就可以從1開始了,少了一次比較。

 public static void main(String[] args) {        // 求陣列元素最大值
        int[] a ={34,23,78,56,31};        int max = a[0];        for (int i=1;i<a.length;i++){            if(a[i]>max){
                max = a[i];
            }
        }
        System.out.println("max:" +max);
    }

圖片描述

圖片描述

增強型for迴圈

和陣列結合起來使用會更加方便

又叫foreach迴圈, foreach迴圈應用:

        System.out.println();
        System.out.println("使用foreach輸出陣列內容:");        for (int n:a) {
            System.out.print(n+" ");
        }

圖片描述

如何對變數a,b的值進行交換

int a=3,b=5;int temp;
temp=a;a=b;b=temp;

氣泡排序

對一組整數按照由小到大的順序進行排序。

圖片描述

假設存放著這樣一組整數,如何將它們從小到大進行排序。

對陣列中元素從頭到位對相鄰的元素進行大小比較。

過程: 對34和53進行比較,發現34和53相比,53大的在右邊是正常的,什麼都不用做,12和53相比發現53是大的,53向上浮一位。53和32進行比較,53比32大,再次上浮。52和56比,很正常。然後56和17比,56上浮。

圖片描述


圖片描述

這就是氣泡排序.

package cn.mtianyan.array;public class SortDemo {    public static void main(String[] args) {        // 氣泡排序
        int[] a ={34,53,12,32,56,17};
        System.out.println("排序前的陣列元素為: ");        for (int n:a){
            System.out.print(n+" ");
        }
        System.out.println();        int temp;        // 外層控制趟,內層冒泡
        for(int i=0;i<a.length-1;i++){            // 內層迴圈控制每趟排序,越到後邊的趟,需要排的越少。
            for (int j=0;j<a.length-1-i;j++){                // 前一個數大於後一個數,交換位置
                if(a[j] > a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        System.out.println("從小到大排序排序後的陣列元素為: ");        for (int n:a) {
            System.out.print(n+" ");
        }
    }
}

執行結果:

圖片描述

package cn.mtianyan.array;public class SortReverseDemo {    public static void main(String[] args) {        // 氣泡排序
        int[] a ={34,53,12,32,56,17};
        System.out.println("排序前的陣列元素為: ");        for (int n:a){
            System.out.print(n+" ");
        }
        System.out.println();        for (int i=0;i<a.length-1;i++){            for (int j=0;j<a.length-1-i;j++){                if(a[j] < a[j+1]){                    int temp = 0;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        System.out.println("從大到小排序後的陣列元素為: ");        for (int n:a){
            System.out.print(n+" ");
        }

    }
}

執行結果:

圖片描述



作者:天涯明月笙
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1600/viewspace-2818704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章