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

 

7-6 陣列資料結構

內容:

  • 7-6-1 陣列資料結構的型態

  • 7-6-2 範例研討:印出班級成績單

  • 7-6-3 自我挑戰:印出已排序成績單

7-6-1 陣列資料結構的型態

資料大多是由多筆紀錄所構成,每筆資料再利用若干個欄位來描述其意思(第8 章將詳細說明)。我們也可以利用二維陣列來儲存資料,陣列中每一行代表一筆紀錄,每行裡包含若干個欄位(列),存放某一特殊訊息,這就是陣列資料結構的架構。陣列資料結構最大的缺點是有元素都必須是相同的資料型態;當然還有其他表示法,以後再詳細介紹。我們用一般學生成績檔案為範例,來說明陣列資料結構的處理過程,如圖 7-9 所示。每一行儲存一筆學生資料,每行有 6 個欄位(6 列),分別存放學生學號、程式設計、資訊網路、資料處理、統計分析、以及總平均分數。

 

程式設計

資訊網路

資料處理

統計分析

總平均

492101

80

90

78

72

0

492102

90

67

54

46

0

492103

71

64

83

53

0

492104

68

89

73

73

0

492105

56

72

53

49

0

492106

96

65

78

83

0

492107

49

62

91

68

0

7-9 陣列資料結構範例

7-6-2 範例研討:印出班級成績單

A)程式功能:Ex7_9.java

張老師利用二維陣列 score[][] = {{492101, 80, 90, 78, 72, 0}, {492102, 90, 67, 54, 46, 0}, {492103, 71, 64, 83, 53, 0}, {492104, 68, 89, 73, 73, 0}, {492105, 56, 72, 53, 49, 0}, {492106, 96, 65, 78, 83, 0}, {492107, 49, 62, 91, 68, 0}} 存放該班的學生成績資料,每筆資料為 {學號、程式設計、資訊網路、資料處理、統計分析、總平均}。請計算每一位同學的總平均分數,再列印出所有成績資料。期望操作介面如下:

D:\Java1_book\chap7>java Ex7_9

學號 程式設計 資訊網路 資料處理 統計分析 總平均

492101  80      90      78      72      80

492102  90      67      54      46      64

492103  71      64      83      53      67

492104  68      89      73      73      75

492105  56      72      53      49      57

492106  96      65      78      83      80

492107  49      62      91      68      67

B)製作技巧研討:

首先計算每位學生的總平均分數,亦填入該欄位(socre[k][5],第 k 位學生),最後在印出所有內容即可。

C)程式範例:

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//Ex7_5.java

 

public class Ex7_5 {

    public static void main(String args[]) {

 

      int score[][] = {{492101, 80, 90, 78, 72, 0},

                  {492102, 90, 67, 54, 46, 0},

                  {492103, 71, 64, 83, 53, 0},

                  {492104, 68, 89, 73, 73, 0},

                  {492105, 56, 72, 53, 49, 0},

                  {492106, 96, 65, 78, 83, 0},

                  {492107, 49, 62, 91, 68, 0}};

 

      /* 計算每位學生的總平均分數 */

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

         score[i][5] = (score[i][1]+score[i][2]+score[i][3]+score[i][4])/4;

 

      /* 列印所有學生成績資料 */

      System.out.printf("學號 程式設計 資訊網路 資料處理 統計分析 總平均\n");

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

             for(int j=0; j<score[i].length; j++)

                  System.out.printf("%d \t", score[i][j]);

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

          }

   }

}

(D) 程式重點分析:

(1) 15~16 :『for(int i=0; i<score.length; i++){ …}』。計算每筆資料的總平均分數。

(2) 20~24 :『for (int i=0; i<score.length; i++) { …}』。列印出陣列所有內容。

7-6-3 自我挑戰:印出已排序成績單

  • 程式功能:PM7_10.java

延續 Ex7_5 範例,請編寫一程式列印出依照總平均分數,由高至低順序的成績單,期望操作介面如下:

G:\Examples\chap7>java PM7_8

學號 程式設計 資訊網路 資料處理 統計分析 總平均

492101  80      90      78      72      80

492106  96      65      78      83      80

492104  68      89      73      73      75

492103  71      64      83      53      67

492107  49      62      91      68      67

492102  90      67      54      46      64

492105  56      72      53      49      57

B)製作技巧提示:

以總平均為基準的排序是比較總平均分數,如果大於的話,則整筆資料都要交換;因此,暫存器需要宣告成具有 6 個欄位的一維陣列(int[] temp = new int[6],每筆資料有 6 個欄位)。泡沫排序法提示如下:

/* 泡沫排序法, 依照總平均分數由高至低排列 */

int temp[] = new int[6];

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

for(int j=i+1; j<score.length; j++) {

if(score[i][5] < score[j][5]) {

temp = score[i];

score[i] = score[j];

score[j] = temp;

}

}

}

 

翻轉工作室:粘添壽

 

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

 

 

翻轉電子書系列: