## Java編程那些事兒49—多維數組使用示例1
鄭州游戲學院 陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
**6.6 多維數組使用示例**
多維數組在實際使用時,更多的在于數組的設計,在實際使用中,一般對于多維數組的統計相對來說比一維數組要少一些,更多的設計數組的大小,并規定數組中存儲值的含義,在代碼中按照值的規定使用數組。
所以在實際使用多維數組以前,需要考慮清楚:
1.?需要幾維數組
2.?每一維的長度是多少
3.?按照怎樣的規則存儲值
4.?數組值的意義是什么
**6.6.1 拉丁方陣**
要求:實現任意階拉丁矩陣的存儲和輸出
拉丁矩陣是一種規則的數值序列,例如4階的拉丁矩陣如下所示:
1???????? 2?3?4
2???????? 3?4?1
3???????? 4?1?2
4???????? 1?2?3
該矩陣中的數字很規則,在實際解決該問題時,只需要把數值的規律描述出來即可。
實現思路:聲明一個變量n,代表矩陣的階,聲明和初始化一個nXn的數組,根據數據的規律,則對應的數值為(行號 + 列號 + 1),當數值比n大時,取和n的余數。
實現的代碼如下:
~~~
???????? ???????? int n = 6;
?????????????????? int[][] arr = new int[n][n];
?????????????????? int data;?//數值
?????????????????? //循環賦值
?????????????????? for(int row = 0;row < arr.length;row++){
??????????????????????????? for(int col = 0;col < arr[row].length;col++){
???????????????????????????????????? data = row + col + 1;
???????????????????????????????????? if(data <= n){
?????????????????????????????????????????????? arr[row][col] = data;
???????????????????????????????????? }else{
?????????????????????????????????????????????? arr[row][col] = data % n;
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
?????????????????? //輸出數組的值
?????????????????? for(int row = 0;row < arr.length;row++){
??????????????????????????? for(int col = 0;col < arr[row].length;col++){
???????????????????????????????????? System.out.print(arr[row][col]);
???????????????????????????????????? System.out.print(' ');
??????????????????????????? }
??????????????????????????? System.out.println();
?????????????????? }
~~~
該代碼中變量data存儲行號+列號+1的值,每次在賦值時判別data的值是否小于等于n,根據判斷的結果賦值對應數組元素的值。
在解決實際問題時,觀察數字規律,并且把該規律使用程序進行表達,也是每個程序員需要的基本技能。
**6.6.2 楊輝三角**
要求:實現10行楊輝三角元素的存儲以及輸出。
楊輝三角是數學上的一個數字序列,該數字序列如下:
1
1???????? 1
1????????? 2?1
1????????? 3?3?1
1????????? 4?6?4?1
該數字序列的規律為,數組中第一列的數字值都是1,后續每個元素的值等于該行上一行對應元素和上一行對應前一個元素的值之和。例如第五行第二列的數字4的值,等于上一行對應元素3和3前面元素1的和。
實現思路:楊輝三角第幾行有幾個數字,使用行號控制循環次數,內部的數值第一行賦值為1,其它的數值依據規則計算。假設需要計算的數組元素下標為(row,col),則上一個元素的下標為(row – 1,col),前一個元素的下標是(row – 1,col – 1)。
實現代碼如下:
~~~
???????? ???????? int[][] arr = new int[10][10];
?????????????????? //循環賦值
?????????????????? for(int row = 0;row < arr.length;row++){
??????????????????????????? for(int col = 0;col <= row;col++){
???????????????????????????????????? if(col == 0){ //第一列
?????????????????????????????????????????????? arr[row][col] = 1;
???????????????????????????????????? }else{
?????????????????????????????????????????????? arr[row][col] = arr[row - 1][col] + arr[row - 1][col - 1];
???????????????????????????????????? }
??????????????????????????? }
?????????????????? }
?????????????????? //輸出數組的值
?????????????????? for(int row = 0;row < arr.length;row++){
??????????????????????????? for(int col = 0;col <= row;col++){
???????????????????????????????????? System.out.print(arr[row][col]);
???????????????????????????????????? System.out.print(' ');
??????????????????????????? }
??????????????????????????? System.out.println();
?????????????????? }
~~~
該題目中數字之間的規律比較簡單,主要是理解數組的下標基本的處理,加深對于數組下標的認識,控制好數組元素的值。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結