|
7-6 陣列資料結構
內容:
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 自我挑戰:印出已排序成績單
延續 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 程式設計(一) 含程式邏輯
翻轉電子書系列:
|