自动生成二维数组,

时间:2015-02-25 12:16:39

标签: java arrays

目前我有一个2D数组,值为1或0.我在数组中的位置硬编码0和1,因为我需要它们在这个序列中。

  //{ { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },N
  //    { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },S
 //  { 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1 }, W
//  { 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0 } };E

是否有更好的解决方案来执行此操作,而不是像上面的示例中那样放置数组的每个值。好像我必须为100 X 100阵列做这个,这需要几天时间

2 个答案:

答案 0 :(得分:0)

以下代码将在提供时创建所需的数据结构。这是一种高效的解决方案。

我们知道第一个(1 st )维度将始终为4,因为北,南,西和东是唯一的方向。第二个(2 nd )维度将计算为n的平方。

在我们建立矩阵的维度并对其进行初始化之后,我们可以开始在0范围内迭代到n的平方。

代码

public int[][] generateDirectionalMatrix(int n) {
    int sq = Math.pow(n, 2);               // 2nd Dimension
    int[][] matrix = new int[4][sq];
    int top = n;                           // Top
    int rgt = n - 1;                       // Right
    int bot = sq - rgt;                    // Bottom
    int lft = 0;                           // Left

    for (int idx = 0; idx < sq; idx++) {
        int col = idx % n;                 // Column

        matrix[0][i] = idx <  top ? 0 : 1; // North
        matrix[1][i] = idx >  bot ? 0 : 1; // South
        matrix[2][i] = col == lft ? 0 : 1; // West
        matrix[3][i] = col == rgt ? 0 : 1; // East
    }

    return matrix;
}

generateDirectionalMatrix(100) // Generates 4 x 10,000 (100 x 100) matrix.

输出

这是您问题中提供的n = 5矩阵的输出。

{ // Structure: 4 x 25 (5 x 5)
  { // North
    0, 0, 0, 0, 0,
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1
  }, { // South
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1,
    1, 1, 1, 1, 1,
    0, 0, 0, 0, 0
  }, { // West
    0, 1, 1, 1, 1,
    0, 1, 1, 1, 1,
    0, 1, 1, 1, 1,
    0, 1, 1, 1, 1,
    0, 1, 1, 1, 1
  }, { // East
    1, 1, 1, 1, 0,
    1, 1, 1, 1, 0,
    1, 1, 1, 1, 0,
    1, 1, 1, 1, 0,
    1, 1, 1, 1, 0
  }
};

实施例

我将上面的代码移植到JavaScript上进行现场演示。

以下代码创建一个4 x 64(8 x 8)矩阵。

var dir = 'North,South,West,East'.split(',');

var n = 8;
var sq = Math.pow(n, 2);
var matrix = [[], [], [], []];

for (var i = 0; i < sq; i++) {
  matrix[0].push(i < n ? 0 : 1);         // North
  matrix[1].push(i >= sq-n ? 0 : 1);     // South
  matrix[2].push(i % n === 0 ? 0 : 1);   // West
  matrix[3].push(i % n === n-1 ? 0 : 1); // East
}

// Display
for (var row = 0; row < matrix.length; row++) {
  var div = document.createElement('div');
  div.className += ' dir';
  div.innerHTML = dir[row] + '\n' + Array(n*2).join('-') + '\n';
  for (var col = 0; col < matrix[row].length; col++) {
    div.innerHTML += matrix[row][col] + (col % n === n-1 ? '\n' : ' ');
  }
  document.body.appendChild(div);
}
.dir {
  float: left;
  padding: 4px;
  margin: 2px;
  background: #E7E7E7;
  border: thin solid black;
  font-family: monospace;
  font-size: 12px;
  white-space: pre;
}

答案 1 :(得分:-1)

你想要这样

count=0;
for(i=0;i<=4;i++)
{
    for(j=0;j<=25;j++)
    {
       if(i==0)
       {
            if(j>5)
                a[i][j]=0;
            else    
                a[i][j]=1;
       }
       else if(i==1)
       {
            if(j<19)
                a[i][j]=0;
            else    
                a[i][j]=1;
       }
       else if(i==2)
       {
            if(count==0)
            {
                a[i][j]=0;
            }   
            else    
                a[i][j]=1;
        if(count==4) 
           count=0;
         else  
           count=count+1;
       }
       else if(i==3)
       {
            if(count==4)
            {
                a[i][j]=0;
            }   
            else    
                a[i][j]=1;
        if(count==4) 
           count=0;
         else  
           count=count+1;
       }
    }
}