陣列(Array) @ Penguin 工作室,一起JAVA吧! - 隨意窩

文章推薦指數: 80 %
投票人數:10人

這和剛才的程式所達到的目的是一樣的,{ }裡面的數值及代表陣列按照順序的值,每個值之間用逗號分開,不同的是這種用法它會根據{ }裡面的值的多寡,自動指定陣列的長度( ... Penguin工作室,一起JAVA吧!曾經以為這輩子不會走上寫程式這條路。

但當我逐漸創作出更多作品,我知道我樂在其中。

沒錯,寫程式是創作。

發揮你的創意DNA,一起JAVA吧!日誌相簿影音好友名片 200910191958陣列(Array)?JAVA入門篇     陣列,就是由一群相同資料型態的資料所組成的一個有順序性的資料列,具體觀念可用下圖來說明:              上圖由一列空格子所組成,格子的數量可以無限延伸,每個格子裡面可以放一筆資料,而且格子間是有順序的。

陣列的概念就是這樣,假設裡面儲存的資料為整數,情況就會如下圖:              宣告陣列的方法有下列兩種:     int[]array=newint[5];     intarray[]l=newint[5];      這兩種方法所達到的目的是一樣的,都是宣告一個名為array的整數陣列,int[5]裡面的數字代表的就是這個陣列有多少個空格,但是請注意,由於在程式語言中索引值都是從0開始編號的,因此當你宣告這個陣列有5個空格時,事實上這5個空格的編號是0-4,而不是1-5。

宣告完成後,這個陣列一開始是沒有值的,所以我們可以把值放進陣列裡面,例如:     array[0]=1;     array[1]=5;     array[2]=100;      這表示我們在陣列的某一格填入某一個值,例如在編號0的格子填入1,在編號1的格子填入5,在編號2的格子填入100等等。

所以現在我們就可以把陣列裡面的值印出來看看,例如:     System.out.println(array[0]);     System.out.println(array[1]);     System.out.println(array[2]);      印出來結果就會是:     1     5     100      另外,我們也可以在宣告陣列時就指定裡面的值,例如:     int[]array={1,5,100};      這和剛才的程式所達到的目的是一樣的,{}裡面的數值及代表陣列按照順序的值,每個值之間用逗號分開,不同的是這種用法它會根據{}裡面的值的多寡,自動指定陣列的長度(格子數)。

     所以上例中陣列的長度會被指定為3,而第一個例子陣列雖然也只有3個值,但是我們一開始有定義陣列的長度為5,因此第一個例子陣列的長度會是5。

我們可以利用length這個屬性來獲得陣列的長度,例如:     array.length      就會得到array這個陣列的長度。

因此我們可以把上面兩個例子的陣利長度都印出來,就可以看到結果:     System.out.println(array.length);      有了length這個屬性之後,我們在取陣列值的時候就可以搭配迴圈來使用,例如:     for(inti=0;i          System.out.println(array[i]);     }      這段程式就會把陣列裡面的值都印出來。

但是事實上如果只是要把陣列中的值全部取出,還有另一個方式:     for(intmember:array){          System.out.println(member);     }      這裡的member是使用者自訂的變數名稱,用來存放陣列目前這個位置的值,所以我們把member的值印出來,就可以看到陣列每個位置的值,冒號後面則是要取值的陣列名稱,例如在這邊是array。

     我們也可以將陣列裡面的值做排序,在使用這個方法前,必須先在程式的最上面載入所需的資源,所以請在class的外面加上:     importjava.util.*;             載入之後,在程式中就可以這樣使用:     Arrays.sort(array);      ()中即是要做排序的陣列的名稱,執行後陣列裡面的值就會做升冪排序,例如:     int[]array={1,100,5};       經過排序後陣列裡面的值會變成{1,5,100}。

     我們可以把排序前和排序後的值印出來看,例如:     int[]array={1,100,5};     System.out.println("排序前:");     for(intmember:array){          System.out.println(member);     }     Arrays.sort(array);     System.out.println("排序後:");     for(intmember:array){          System.out.println(member);     }      可以發現執行結果為:     排序前:     1     100     5     排序後:     1     5     100      可明顯看出陣列被排序過了。

     其他資料型態的使用方式也是一樣的,只是宣告的部分改為要用的資料型態,例如:     int[]array=newint[5];     char[]test=newchar[5];     String[]test2=newString[5];      而字元型態陣列做排序時,會比較字元的ASCII碼,字串則會比較第一個字元,若第一個字元相同,會比較第二個字元,以此類推。

     此外,陣列也可以直接指定給另外一個陣列,例如:     int[]a={5,10};     int[]b=a;      這樣一來b的值會和a一模一樣。

然而當我們再次改變a陣列的值時,例如:     int[]a={5,10};     int[]b=a;     a[0]=15;      會發現b陣列的值也同樣跟著改變了,已就是說b[0]此時也變成15,這是因為這樣做時,a和b被指定到同樣的記憶體空間,說明如下:             當我們使用b=a時,程式會把b指定到和a相同的實體記憶體位置,這樣我們就會得到一模一樣的陣列,但是當a的值改變時,由於b還是指定到相同的位置,所以b所讀取到的值也會是改變過後的值。

那麼要如何才能讓兩個陣列的記憶體位置是不一樣的呢?我們可以用下面語法:     System.arraycopy(a,0,b,0,a.length);      這個語法會把a的值複製到b自己的記憶體位置,而不會指定到同樣的位置,第二個數字的0(a,0,b,0,a.length)代表從a的第0個值開始複製,第四個數字0(a,0,b,0,a.length)則代表從b的0開始複製,最後的a.length則代表複製到a的哪一個值,a.length表示複製到a的最後一個值。

利用下面語法就可以觀察出當a的值被改變,b的值不會受到影響:     int[]a={5,10};     int[]b=newint[a.length];     System.out.println("a的值改變前");     System.arraycopy(a,0,b,0,a.length);     for(intmember:a){          System.out.println(member);     }     for(intmember:b){          System.out.println(member);     }     a[0]=999;     System.out.println("a的值改變後");     for(intmember:a){          System.out.println(member);     }     for(intmember:b){          System.out.println(member);     }      執行結果為:     a的值改變前     5     10     5     10      a的值改變後     999     10     5     10      以上所介紹的陣列叫做二維陣列,也就是只有一列數值,但事實上陣列還可以有多維陣列,例如:            也就是說可以由很多列組成。

     多維陣列的用法和二維陣列基本上類似,只是在宣告及取值時有一些變化:     int[][]array=newint[2][3];//宣告一2*3的多維陣列     array[0][2]=10;//取出多維陣列的值     int[][]array2={{10,5},{8,9},{6,9}};//宣告一帶有預設值的2*3多維陣列      而利用迴圈取值時可以利用下列語法:     for(inti=0;i++){          for(intj=0;j              System.out.println(array2[i][j]);          }     }      其中array[i].length可以得到某一列的長度。

另外一種方法為:     for(intcolumn[]:array){          for(introw:column){              System.out.println(row);          }     }      其中intcolumn[]:array會把陣列的每一列分別取出,introw:column再把取出的陣列每一格取出。

     當然,多為陣列也可以有更多維的組合,用法都是一樣的,甚至每一列的長度是可以不一樣的,稱為不規則陣列,例如:     int[][]array={{10,5,4},{8,9},{6,9}};      因此使用者可以根據不同的需求設計不同的陣列。

劉蓁/Xuite日誌/回應(0)/引用(0)沒有上一則|日誌首頁|沒有下一則回應 全部展開|全部收合 關鍵字 jane17512001's新文章視窗程式JavaSwing-常用元件視窗程式JavaSwing-基本設定及LayoutXMPP即時通訊Queue(佇列)、ConcurrentLinkedQueue遞迴(Recursion)以及求解最大公因數log4j日誌記錄正則表示式(Regularexpression)HTTP連線(HttpURLConnection、HttpClient)ResourceBundleFTP檔案傳輸(apache.common.net.ftp) BloggerAds



請為這篇文章評分?