Java 程式設計(一)  第 七章 陣列      下一頁

 

第七章 陣列

7-1 陣列結

內容:

  • 7-1-1 一維陣列結構

  • 7-1-2 一維陣列宣告

  • 7-1-3 範例研討:印出股票歷史價

  • 7-1-4 範例研討:最近十天的平均價

  • 7-1-5 自我挑戰:最近十天的最高/最低價

7-1-1 一維陣列 結構

陣列(Array是一群相同『資料型態』的變數整合而成的另一種變數,並使用一個共用的參考名稱。其中『資料型態』可以是一般基本資料型態(如 intfloatdouble...等),也可以是一個『物件』型態(如 String...等)。

如圖 7-1 所示(一維陣列結構),陣列 a 包含了 8 個相同資料型態(int)的變數,這些變數各自獨立的,也可分別儲存資料,之間並不相衝突;但為了使這些資料之間也某些連帶關係,利用相同的變數名稱(如 a),各自給予獨立的指標(a[i]i = 0, …, 7)。

7-1 一維陣列結構

對資料整合與運用(如資料結構)而言,陣列是非常重要的資料型態,可用來描述許多真實環境的現象。本章先介紹一些陣列的基本觀念與運用。

7-1-2 一維陣列宣告

『一維陣列』(One dimension array表示僅有一行或一列的資料結構,但一列陣列可能包含若干個行;一行陣列也可能包含多個列之結構,如圖 7-1 所示。一維陣列僅需要一個指標變數(如 i)來索引陣列中哪一個元素(如 a[i]i = 3)。Java 語言宣告陣列的基本語法說明如下:

A)陣列動態宣告:

其實在 Java 語言裡,無論哪一種基本資料型態,或以宣告完成的物件,它都是以物件的觀念來處理,尤其在陣列資料型態裡更是明顯。如同物件一樣,宣告某一陣列變數,只不過產生了資料型態架構,必須再經由 new 敘述才能在主記憶體裡取得變數空間。基本語法如下:

陣列宣告的語法:

 範例:

Data_type Array_name[];

Array_name = new Data_type[number];

int course[];

course = new int[20];

Data_type[] Array_name = new Data_type[num];

Array_name.length() = num;

int [] course =new int [20];

course.length() = 20;

第一個敘述(如 int course[])功能是宣告某一變數(course)為整數(int)的陣列變數;第二個敘述(如 course = new int[20])功能是由主記憶體取得 20 個整數空間,並配置給 course 變數使用。此兩條敘述執行完畢後,則產生 course[0]course[1]...等、course[19];需注意陣列指標是由 0 開始計算,如有 n 個元素,則最高指標是 n-1 另外,系統也會自動產生 length 變數,紀錄該變數的長度如何,如 course = int[20],則 course.length = 20。上述範例亦可簡寫成 int[] course = new int[20],一行敘述句完成宣告。

B)陣列宣告並給予初值

宣告陣列時可以給予初值,則表示由記憶體取得空間後立即存入初值數值,陣列的大小就如此被固定下來(length 變數內容),也不需再由 new 敘述來配置空間。語法格式如下:

陣列宣告並給予初值:

 範例:

Data_type Array_name[] = { …};

int course[] = {89, 90, 60, 70, 80};

// course.length = 5

上述執行後,會產生 5 個元素,分別是 course[0] = 89course[1] = 90course[2] = 60course[3] = 70 course[4] = 80,以及 course.length = 5。吾人還是取用更多範例說明如下:

陣列宣告範例:

說明:

float weight[];

weight = new float[30]

宣告 weight 陣列變數為浮點數型態。

產生 30 個浮點數元素;weight.length=30

float weight = new float[30];

同上

String[] names;

names = String[20];

宣告 names 陣列變數為字串型態。

產生 20 個字串元素;names.length=20

7-1-3 範例研討:印出股票歷史價

A)程式功能:Ex7_1.java

吾人利用陣列 course[] = {78.8, 72.3, 61, 56, 87, 66.3, 74.5, 88, 76, 58}; 儲存某一支股票最近 10 個交易日的收盤價,請列印出其內容;期望操作介面如下:

D:\Java1_book\chap7>java Ex7_1

78.80  72.30  61.00  56.00  87.00  66.30  74.50  88.00  76.00  58.00

B)製作技巧研討:

陣列中每一個元素都是獨立變數,必須利用指標變數一個接一個取出再列印。本範例 course[] 包含了 10= course.length)個元素,則利用指標 i = 0, 1, …, 9,分別索引每一元素 course[i] 的內容。譬如,當 count =0,則 course[0] = 78.8count=1,則course[1] = 72.3,依此類推。因此,吾人可利用 for 迴圈,條件初始值為 i = 0、判斷條件 count < course.length、增減量為 i++

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

//Ex7_1.java

 

public class Ex7_1 {

     public static void main(String args[]) {

          double course[]={78.8, 72.3, 61, 56, 87,

                        66.3, 74.5, 88, 76, 58};

 

          /* course[0]~ course[course.length-1] 列印陣列 */

          for(int i=0; i<course.length; i++)

              System.out.printf("%.2f  ", course[i]);

          System.out.printf("\n");           // 列印完畢, 換行

     }

}

(D) 程式重點分析:

(1) 5~6 double course[] = { …}。宣告 course 陣列變數為 double 資料型態,也立即給予初值。

(2) 9~10 for( ..; i<course.length; ..) System.out.printf("%.2f  ", course[i];。其中 length 變數表示元素的個數( 10),但陣列元素是由 0 開始計算,因此最後一個元素是 length -1。另外,列印格式是 "%.2f  ",其表示印出有 2 位小數點的浮點格式(%.2f),後面再接兩個空白格。

7-1-4 範例研討:最近十天的平均價

A)程式功能:Ex7_2.java

請修改 Ex7_1.java 程式,使其功能不但輸出最近 10 個交易日的收盤價,並計算出他的平均價如何。【利用陣列 course[] = {78.8, 72.3, 61, 56, 87, 66.3, 74.5, 88, 76, 58}; 儲存某一支股票最近 10 個交易日的收盤價】,期望操作介面如下:

78.80  72.30  61.00  56.00  87.00  66.30  74.50  88.00  76.00  58.00 

最近 10 天的平均價 = 71.79

B)程式範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//Ex7_2.java

/* 吾人利用陣列 course[]={78.8,72.3,61,56,87,66.3,74.5,88.76.58}

* 儲存某一支股票最近10個交易日的收盤價,請計算它的平均價 */

 

public class Ex7_2 {

   public static void main(String args[]) {

        double course[]={78.8, 72.3, 61, 56, 87,

                         66.3, 74.5, 88, 76, 58};

        double sum=0, ave;

        for(int i=0; i<course.length; i++) {

        System.out.printf("%.2f  ", course[i]);

        sum = sum + course[i];

        }

        System.out.printf("\n");

        ave = sum /course.length;

        System.out.printf("最近 10 天的平均價 = %.2f", ave);

   }

}

7-1-5 自我挑戰:最近十天的最高/最低價

A)程式功能:PM7_1.java

請修改 Ex7_1.java 程式,使其功能不但輸出最近 10 個交易日的收盤價,並比較輸出其中最高與最低價格如何。【利用陣列 course[] = {78.8, 72.3, 61, 56, 87, 66.3, 74.5, 88, 76, 58}; 儲存某一支股票最近 10 個交易日的收盤價】,期望操作介面如下:

期望操作介面如下:

78.80  72.30  61.00  56.00  87.00  66.30  74.50  88.00  76.00  58.00 

最近 10 天的最高價格 = 88.00

最近 10 天的最低價格 = 56.00

B)程式設計技巧:(程式片段)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class PM7_1 {

   public static void main(String args[]) {

// 這是程式片段

        double Max=0.0, Min=9999.9;

        for(int i=0; i<course.length; i++) {

        System.out.printf("%.2f  ", course[i]);

        if (Max < course[i])

                 Max = course[i];

        if (Min > course[i])

                 Min = course[i];

        }

……// 這是程式片段

   }

}

 

翻轉工作室:粘添壽

 

Java 程式設計(一) 含程式邏輯

 

 

翻轉電子書系列: