程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java編程那些事兒50—多維數組使用示例2

Java編程那些事兒50—多維數組使用示例2

編輯:關於JAVA

6.6.3 存儲圖形結構

要求:根據數組中的值,在對應位置繪制指定的字符。規定0繪制空格,1繪制星號(*)。數組的值如下所示:

{
 {0,0,0,1,0,0,0},
 {0,0,1,0,1,0,0},
 {0,1,0,0,0,1,0},
 {1,0,0,0,0,0,1},
 {0,1,0,0,0,1,0},
 {0,0,1,0,1,0,0},
 {0,0,0,1,0,0,0}
}

該題目是一個基本的數組應用,數組中的值存儲的是控制信息,程序根據數組中的值實現規定的功能。

實現思路:循環數組中的元素,判斷數組中的值,根據值繪制對應的字符即可。

實現的代碼如下所示:

int[][] map = {
  {0,0,0,1,0,0,0},
  {0,0,1,0,1,0,0},
  {0,1,0,0,0,1,0},
  {1,0,0,0,0,0,1},
  {0,1,0,0,0,1,0},
  {0,0,1,0,1,0,0},
  {0,0,0,1,0,0,0}
};
//輸出數組的值
for(int row = 0;row < map.length;row++){
 for(int col = 0;col < map[row].length;col++){
  switch(map[row][col]){
  case 0:
   System.out.print(' ');
   break;
  case 1:
   System.out.print('*');
   break;
  }
 }
 System.out.println();
}

類似的代碼在游戲開發中,可以用來代表游戲中的地圖數據,或者俄羅斯方塊等益智游戲中地圖塊的值。

6.6.4 螺旋數組

要求:存儲和輸出nXm的螺旋數組,其中n和m為大於0的整數。

以下是一些螺旋數組的示例:

1     2 3 4          1 2 3 4 5
1213145           14 15 16 176
11 16156           13 20 19 18 7
109 8 7           12 11 10  9 8
4X4螺旋數組            4X5螺旋數組

對於螺旋數組來說,其中的數值很有規則,就是按照旋轉的結構數值每次加1,實現該功能需要對數組和流程控制有角深刻的認識。

實現思路:聲明一個變量來代表需要為數組元素賦的值,對於其中的數字來說,每個數字都有一個移動方向,這個方向指向下一個元素,根據該方向改變數組的下標,如果到達邊界或指向的元素已經賦值,則改變方向。

實現代碼如下:

int n = 4;
int m = 5;
int[][] data = new int[n][m];
int dire;  //當前數字的移動方向
final int UP = 0;  //上
final int DOWN = 1; //下
final int LEFT = 2; //左
final int RIGHT = 3;//右
dire = RIGHT;
int value = 1;  //數組元素的值
int row = 0;   //第一維下標
int col = 0;   //第二維下標
data[0][0] = 1;//初始化第一個元素
while(value < n * m){
 switch(dire){
  case UP:
      row--; //移動到上一行
      if(row < 0){ //超過邊界
       row++; //後退
       dire = RIGHT;
       continue; //跳過該次循環
      }else if(data[row][col] != 0){//已賦值
       row++; //後退
       dire = RIGHT;
       continue; //跳過該次循環
      }
      break;
  case DOWN:
      row++; //移動到下一行
      if(row >= n){ //超過邊界
       row--; //後退
       dire = LEFT;
       continue; //跳過該次循環
      }else if(data[row][col] != 0){//已賦值
       row--; //後退
       dire = LEFT;
       continue; //跳過該次循環
      }
      break;
  case LEFT:
      col--; //移動到前一列
      if(col < 0){ //超過邊界
       col++; //後退
       dire = UP;
       continue; //跳過該次循環
      }else if(data[row][col] != 0){//已賦值
       col++; //後退
       dire = UP;
       continue; //跳過該次循環
      }
      break;
  case RIGHT:
      col++; //移動到後一行
      if(col >= m){ //超過邊界
        col--; //後退
        dire = DOWN;
        continue; //跳過該次循環
      }else if(data[row][col] != 0){//已賦值
        col--; //後退
        dire = DOWN;
        continue; //跳過該次循環
      }
      break;
 }
 value++; //數值增加1
 data[row][col] = value;//賦值
}
//輸出數組中的元素
for(int i = 0;i < data.length;i++){
 for(int j = 0;j < data[i].length;j++){
  if(data[i][j] < 10){//右對齊
   System.out.print(' ');
  }
  System.out.print(data[i][j]);
  System.out.print(' ');
 }
 System.out.println();
}

在該代碼中dire代表當前元素的移動方向,每個根據該變量的值實現移動,如果移動時超出邊界或移動到的位置已賦值,則改變方向,並跳過本次循環,如果移動成功,則數值增加1,對數組元素進行賦值。

對於多維數組來說,更多的是設計數組的結構,並根據邏輯的需要變換數組的下標,實現對於多維數組元素的操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved