1. 程式人生 > 實用技巧 >【Java基礎】Eclipse 和陣列

【Java基礎】Eclipse 和陣列

Eclipse 和陣列

Eclipse 安裝和使用

...

陣列的概述

陣列(Array):是多個相同型別資料按一定順序排列的集合,並使用一個名字命名,並通過編號的方式對這些資料進行統一管理。

陣列相關的概念:

  • 陣列名;
  • 元素;
  • 下標或索引;
  • 陣列的長度。

陣列的特點:

  • 陣列是有序排列的;
  • 陣列屬於引用資料型別的變數,但是陣列的元素可以是任何陣列型別;
  • 建立陣列物件會在記憶體中開闢一整塊連續的空間;
  • 陣列的長度一旦確定,就不能修改。

陣列的分類:

  • 按維數:一維、二維、...;
  • 按型別:基本資料型別的陣列、引用資料型別的陣列。

一維陣列的使用

宣告:

  • 宣告方式:type var[];
    type[] var;
  • 宣告陣列時不能指定其長度,例如 int a[5]; 就非法。

初始化:

  • 動態初始化:陣列宣告且為陣列元素分配空間 與 賦值的操作 分開進行;

    String[] names = new String[5];
    names[0] = "A1";
    names[1] = "A2";
    names[2] = "A3";
    
  • 靜態初始化:陣列宣告且為陣列元素分配空間 與 賦值的操作 同時進行;

    String[] names = {"AA", "BB", "CC"};
    // 或者
    String[] names = new String[]{"AA", "BB", "CC"};
    

陣列元素的引用:

  • 定義並用運算子 new 為之分配空間後,才可以引用陣列中的每個元素;
  • 陣列元素的引用方式:陣列名[陣列元素下標]
  • 每個陣列都有一個屬性 length 指明它的長度,陣列一旦初始化,其長度是不可變的。

陣列元素的預設初始值:

  • 因為陣列是引用型別,它的元素相當於類的成員變數,因此陣列一經分配空間,其中的每個也被按照成員變數同樣的方式被隱式初始化

    public class Test{
        public static void main(String[] args) {
            int[] a= new int[5];
            for (int i = 0; i < a.length; ++i) {
                System.out.println(a[i]); // 0 0 0 0 0
            }
        }
    }
    
    
  • 對於基本資料型別而言,byte、short、int、long、float、double、char 均為 0,boolean 為 false;

  • 對於引用資料型別而言,預設初始化值為 null。

一維陣列的記憶體解析

記憶體的典型結構:

  • 棧(stack):區域性變數;
  • 堆(heap):new 出來的結構;
  • 方法區:
    • 常量池;
    • 靜態域。
package com.parzulpan.java.ch03;

import java.util.Scanner;

/**
 * @Author : parzulpan
 * @Time : 2020-11-17
 * @Desc : 從鍵盤讀入學生成績,找出最高分,並輸出學生成績等級。
 * 成績>=最高分-10 等級為’A’
 * 成績>=最高分-20 等級為’B’
 * 成績>=最高分-30 等級為’C’
 * 其餘 等級為’D’
 */

public class ArrayTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入學生人數:");
        int studentNumber = scanner.nextInt();
        int[] studentScores = new int[studentNumber];
        int maxScore = 0;
        int temp;
        System.out.println("請輸入 " + studentNumber + " 個成績:");
        for (int i = 0; i < studentScores.length; ++i) {
            temp = scanner.nextInt();
            studentScores[i] = temp;
            if (maxScore < temp) {
                maxScore = temp;
            }
        }

        System.out.println("最高分是:" + maxScore);

        char level;
        for (int i = 0; i < studentScores.length; ++i) {
            if (maxScore - 10 <= studentScores[i]) {
                level = 'A';
            } else if (maxScore - 20 <= studentScores[i]) {
                level = 'B';
            } else if (maxScore - 30 <= studentScores[i]) {
                level = 'C';
            } else {
                level = 'D';
            }

            System.out.println("student " + i + " , score is " + studentScores[i] + " , grade is " + level);
        }

    }
}

二維陣列的使用

多維陣列:

  • Java 語言裡提供了支援多維陣列的語法;
  • 可以把一維陣列當成幾何中的線性圖形,那麼二維陣列就相當於是一個表格;
  • 可以看成是一維陣列 array1 又作為另一個一維陣列 array2 的元素而存在。其實,從陣列底層的執行機制來看,其實沒有多維陣列

初始化:

  • 動態初始化:

    int[][] arr = new int[3][2];  // 二維陣列中有 3 個一維陣列,每一個一維陣列中有 2 個元素
    
    int[][] arr = new int[3][];   // 二維陣列中有 3 個一維陣列,每一個一維陣列都是預設初始值 null
    
  • 靜態初始化:

    int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};
    // 或者
    int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};  // 型別推斷
    
  • 特殊的,int[] x, y[]; x 是一維陣列,y 是二維陣列;

  • Java 中多維陣列不必都是規則矩陣形式。

陣列元素的預設初始值:

  • 看程式得結論:

    public class Test {
      public static void main(String[] args) {
          int[][] arr = new int[4][3];
          System.out.println(arr);    // 地址:[[I@2ff4f00f
          System.out.println(arr[0]);   // 地址:[I@2ff4f00f
          System.out.println(arr[0][0]);    // 0
    
          String[][] arr2 = new String[4][2];
          System.out.println(arr2);    // 地址:[[Ljava.lang.String;@3f0ee7cb
          System.out.println(arr2[0]);   // 地址:[Ljava.lang.String;@75bd9247
          System.out.println(arr2[0][0]);    // null
    
          String[][] arr3 = new String[4][];
          System.out.println(arr3);    // 地址:[[Ljava.lang.String;@7d417077
          System.out.println(arr3[0]);   // null
          System.out.println(arr3[0][0]);    // Error
      }
    }
    

二維陣列的記憶體解析

...

練習和總結


建立一個長度為 6 的 int 型陣列,要求陣列元素的值都在 1-30 之間,且是隨機賦值。同時,要求元素的值各不相同。

package com.parzulpan.java.ch03;

/**
 * @Author : parzulpan
 * @Time : 2020-11-17
 * @Desc : 建立一個長度為 6 的 int 型陣列,要求陣列元素的值都在 1-30 之間,且是隨機賦值。同時,要求元素的值各不相同。
 */

public class genArray {
    public static void main(String[] args) {
        int[] arr = new int[6];

        for (int i = 0; i < arr.length; ++i) {
            arr[i] = (int)(Math.random() * 30) + 1;

            for (int j = 0; j < i; ++j) {
                if (arr[i] == arr[j]) {
                    --i;
                    break;
                }
            }
         }

        for (int value : arr) {
            System.out.println(value);
        }
    }
}