iT邦幫忙

1

【左京淳的JAVA學習筆記】第二章 陣列與列表

學習重點

  • 一維陣列
  • 多維陣列(陣列內含有陣列,形成多層結構)
  • 列表(java.util.ArrayList類)

陣列的宣告

int [] id;//宣告陣列名稱為id & 資料型態為int
id = new int[3];//確保陣列能保存的內容數
也可以寫成一行
int [] id = new int[3];
也可以直接指定內容
int [] id = {1,2,3};
或是利用index值填入資料如下:
id[0] = 1;
id[1] = 2;
id[2] = 3;
在陣列的第一個位置填入1,第二個位置填入2,第三個位置填入3

用length方法調查陣列長度

int size = id.length;
此案例的size會等於3

建立Sample2_1.java練習看看

class Sample2_1 {
  public static void main(String[] args) {
    char[] c; //宣告陣列
    c = new char[3]; //作成
    int[] i = new int[3]; //一行搞定宣告&作成
    String str[] = {"AAA","BBB","CCC"}; //宣告、作成並賦值。
    c[0] = 'A';c[1] = 'B';c[2] = 'C';
    i[0] = 100;i[1] = 200;i[2] = 300;
    System.out.println("str的長度為:" + str.length);
    System.out.println("c[0] :" + c[0]);
    System.out.println("i[1] :" + i[1]);
  }
}

編譯後執行,可能會發現"str的長度為:"這行變成亂碼
這是因為CMD環境的編碼不一致
如果只想暫時性改變CMD環境編碼,可使用以下指令
chcp 950
※chcp = chang code page。950是繁體中文的號碼,utf-8則是65001。
此設定在關閉畫面之後就會恢復為預設值。
疑問:不知道為什麼,編譯時用utf-8編譯,CMD環境也設為utf-8,執行時中文卻還是顯示亂碼。非得設成繁體中文才行。(使用指令chcp 950)

如果想永久修改CMD環境編碼
1.Win+R,輸入regedit開啟登錄檔編輯器
2.找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
3.右鍵新建一個字串值(S),取名叫Autorun,值設為@chcp 950>nul

延伸1-陣列預設值

建立Sample2_2.java

class Sample2_2 {
  public static void main(String[] args) {
    int i ;
    System.out.println("i的值為:" + i);
    int [] array = new int[5];
    System.out.println("array[0]的值為:" + array[0]);
  }
}

以上的程式碼由於i雖然被宣告了,但裡面沒有值所以會報錯。
把以下這行註解掉再試一次
//System.out.println("i的值為:" + i);

會發現array[0]雖然沒有指定值,但是自動被預設為0了。
這是因為在new一個陣列時,會先自動填入預設值。

多維陣列

建立Sample2_3.java檔案並寫入以下內容

class Sample2_3 {
  public static void main(String[] args) {
    int[][] array;
    array = new int[3][4]; //陣列裡有三個物件,每個物件又內含四個物件。
    array[0][0] = 100;
    array[0][3] = 200;
    System.out.println("array[0][0]的值:" + array[0][0]);
    System.out.println("array[0][3]的值:" + array[0][3]);
  }
}

依照下面的步驟將java檔編譯後執行,就跟之前做的一樣。
如果怕忘記或找不到指令,可以用記事本記起來。
cd C:\Users\userXXX\Desktop\java //移動到案件資料夾
javac -encoding utf-8 Sample2_3.java //編譯(使用utf-8以避免中文亂碼)
java Sample2_3 //執行

基本上多維陣列的概念就跟windows的資料夾一樣,
每個資料夾裡面都可能還有不定數量的資料夾或檔案。
再看一個範例:

class Sample2_4 {
  public static void main(String[] args) {
    /*
    int[][] array = new int[3][]; //陣列裡有三個物件,每個物件裡的東西尚不指定。
    array[0] = new int[3]; //指定array[0]裡面有三個存放int資料的空間
    array[1] = new int[5]; //指定array[1]裡面有五個存放int資料的空間
    array2] = new int[2]; //指定array[2]裡面有二個存放int資料的空間
    */

    //創建陣列並賦值
    int[][] array = {{10,20,30},{50,60,70,80,90},{100,200}};

    System.out.println("array[0][0]的值:" + array[0][0]);
    System.out.println("array[1][4]的值:" + array[1][4]);
  }
}

這個範例說明了創建陣列時,不一定要一次把所有條件都指定好。 而且每個陣列的長度也可以不一樣。 可以先規定好陣列的大小後,一一賦值,也可以直接創立陣列並賦值。 本案例就用了/*和*/符號把一開始三行的程式碼註解掉。 直接創立陣列並賦值

列表

JAVA利用java.util.ArrayList類實現了可變長的列表功能。
方才的陣列長度是固定不可變的,例如:

array = new int[3];

這行程式碼就確保了記憶體中,預留了3個保存int資料的空間。不能增加也不能減少。
但ArrayList類可以。

工具類

JAVA裡面有很多既有的工具類可使用,ArrayList類就是其中一種。要使用這些工具,需要先import。
像是把工具從倉庫拿到工作檯來一樣。
ArrayList的使用流程如下:

  1. import java.util.ArrayList; //載入類
  2. ArrayList array; //宣告list
  3. array = new ArrayList(3); //確保領域,變數名 = new ArrayList<資料形式>(初期大小)
  4. array.add("Tom"); //用add方法賦值
  5. String name = array.get(0); //用get方法取值

可以發現這邊賦值和取值的方式和陣列不一樣,
在JAVA的工具類中,每個類都有自己的使用方法,不會用的時候就用關鍵字google吧。

基本資料類型與物件

在新增一個ArrayList時,<>內只能存放物件,不能放int,double等基本資料型態。
像下面這行程式碼因為放了int就會報錯:

ArrayList<int> array = new ArrayList<int>();

為了解決這個問題,JAVA有提供一些物件來包覆基本資料型態如下表:

基本資料型態 對應的wrapper class
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

利用cast指定資料類型

利用get方法取出資料時,JAVA會自動檢查來源與目標的資料型態是否可以互換。
如果無法確認來源資料是什麼類型,就會在編譯時報錯。如下例:

ArrayList<int> array = new ArrayList<int>();
array.add(10);
int num = array.get(0);

由於無法確認array裡面會拿出什麼東西來,所以報錯,應修改成下面的樣子:
int num = (Integer)array.get(0);
利用()來指定資料型態,像是過海關一定要填申報單一樣。

省略寫法

新建ArrayList的時候,左右都要重複寫一次資料類型很麻煩,
所以在JAVA SE7版本之後,右邊的資料類型可以省略不寫。如下例:

ArrayList<int> array = new ArrayList<>();

引數的使用

在CMD畫面執行指令的時候,可以在指令後面給予引數,告訴電腦一些額外資訊。例如檔案路徑也是引數的一種。
https://imgur.com/UI0L2Vh

在執行「java」這個指令時,第一個引數會被當成要執行的路徑或檔案名稱,
第二個以後的引數則會被傳進執行的程式裡,保存在String[] args列表裡面。
我們可以在程式裡對這些引數做一些處理。處理完的結果就跟上圖一樣。

class Sample2_5 {
  public static void main(String[] args) {
    System.out.println(args[0]);
    System.out.println(args[1]);
    System.out.println(args[0] + args[1]);
  }
}

※JAVA裡的引數預設被保存為String形式,如果要轉換成數字,可以使用以下方法
int num = Integer.parseInt(args[0]);

在CMD畫面裡有許多可以直接使用的指令,這些指令常常會需要搭配引數來使用。
我們也可以自己寫指令,就如同Sample2_5一樣,自己定義指令後面的各個引數該如何被使用。

以上 是第二章 陣列與列表的學習紀錄
下一章會講演算子與分歧文(if)

參考教材: JAVAプログラマSilver SE8 - 山本 道子


尚未有邦友留言

立即登入留言