Java - 打印二维数组

时间:2011-10-16 03:00:56

标签: java

我有一个[20] [20]二维数组,我操纵过。简而言之,我正在做一个乌龟项目,用户输入指令,如笔向上= 0和笔向下= 1.当笔向下时,单个阵列位置,例如[3] [4]标记为“1”

我的程序的最后一步是打印出20/20数组。

我无法弄清楚如何打印它,我需要用“X”替换“1”

print命令实际上是父类程序将调用的类中的一个方法...我知道我必须使用循环...任何帮助都将不胜感激。

public void printGrid()
        {
            System.out.println...
        }

10 个答案:

答案 0 :(得分:36)

您可以使用Utility mettod。 Arrays.deeptoString();

 public static void main(String[] args) {
    int twoD[][] = new int[4][]; 
    twoD[0] = new int[1]; 
    twoD[1] = new int[2]; 
    twoD[2] = new int[3]; 
    twoD[3] = new int[4]; 

    System.out.println(Arrays.deepToString(twoD));

}

答案 1 :(得分:25)

public void printGrid()
{
   for(int i = 0; i < 20; i++)
   {
      for(int j = 0; j < 20; j++)
      {
         System.out.printf("%5d ", a[i][j]);
      }
      System.out.println();
   }
}

并替换

public void replaceGrid()
{
   for (int i = 0; i < 20; i++)
   {
      for (int j = 0; j < 20; j++)
      {
         if (a[i][j] == 1)
            a[i][j] = x;
      }
   }
}

你可以一次性完成这一切:

public void printAndReplaceGrid()
{
   for(int i = 0; i < 20; i++)
   {
      for(int j = 0; j < 20; j++)
      {
         if (a[i][j] == 1)
            a[i][j] = x;
         System.out.printf("%5d ", a[i][j]);
      }
      System.out.println();
   }
}

答案 2 :(得分:20)

我在另一个问题中回答这样的事情

public class Snippet {
    public static void main(String[] args) {
        int [][]lst = new int[10][10];

        for (int[] arr : lst) {
            System.out.println(Arrays.toString(arr));
        }
    }

}

答案 3 :(得分:1)

您应该按行循环,然后使用类似

的结构进行循环
for ...row index...
  for ...column index...
    print

但我想这是作业,所以请亲自尝试一下。

交换for循环中的行/列索引,具体取决于您是先需要先关闭然后再关闭,先关闭然后再关闭。

答案 4 :(得分:1)

好吧,因为'X'是一个char而不是一个int,你实际上不能在矩阵本身中替换它,但是,下面的代码应该打印一个'x'字符,只要它遇到a 1。

public void printGrid(int[][] in){  
    for(int i = 0; i < 20; i++){  
        for(int j = 0; j < 20; j++){  
            if(in[i][j] == 1)  
                System.out.print('X' + "\t");
            else
                System.out.print(in[i][j] + "\t");
        }
        System.out.print("\n");
    }
}

答案 5 :(得分:1)

尝试这个怎么样?

var ldap = require('ldapjs');
var promise = require('bluebird');

var client = ldap.createClient({url: app.settings['ldap']['server']});
var uid;

promise.promisifyAll(client);

function searchPromise(res, notfoundtext) {
  return new Promise(function(resolve, reject) {
    var found = false;
    res.on('searchEntry', function(entry) {
      found = true;
      resolve(entry);
    });
    res.on('error', function(e) {
      reject(e.message);
    });
    res.on('end', function() {
      if (!found) {
        reject(notfoundtext);
      }
    });
  });
}

client.searchAsync(app.settings['ldap']['baseDn'], {filter: '(mail='+credentials.email+')', scope: 'sub'})
  .then(function(res) {
    return searchPromise(res, 'User isn\'t exists.');
  })
  .then(function (entry) {
    uid = entry.object.uid;
    return client.bindAsync(entry.object.dn, credentials.password);
  })
  .then(function() {
    return client.searchAsync('cn='+app.settings['ldap']['group']+',cn=groups,'+app.settings['ldap']['baseDn'], {scope: 'sub', filter: '(memberUid='+uid+')'});
  })
  .then(function(res) {
    return searchPromise(res, 'User is not in group ' + app.settings['ldap']['group']);
  })
  .then(function() {
    console.log('All is ok');
  })
  .catch(function(message) {
    console.log('Error:' + message);
  });

答案 6 :(得分:0)

如果您知道矩阵的maxValue(如果元素的另一次迭代可以轻松完成),我会发现以下代码更有效和通用。

    int numDigits = (int) Math.log10(maxValue) + 1;
    if (numDigits <= 1) {
        numDigits = 2;
    }
    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < matrix.length; i++) {
        int[] row = matrix[i];
        for (int j = 0; j < row.length; j++) {
            int block = row[j];
            buf.append(String.format("%" + numDigits + "d", block));
            if (j >= row.length - 1) {
                buf.append("\n");
            }
        }
    }
    return buf.toString();

答案 7 :(得分:0)

public static void printTwoDimensionalArray(int[][] a) {
    for (int i = 0; i < a.length; i++) {
        for (int j = 0; j < a[i].length; j++) {
            System.out.printf("%d ", a[i][j]);
        }
        System.out.println();
    }
}

仅适用于int数组

答案 8 :(得分:0)

我还是一个初学者,我已经使用两个嵌套的for循环设法破解了这个问题。

我在这里查看了答案,对我来说它们有些先进,所以我认为我会和我分享一下,以帮助所有其他新手。

P.S。这是针对Whack-A-Mole游戏的,因此为什么将数组称为“ moleGrid”。

public static void printGrid() {
    for (int i = 0; i < moleGrid.length; i++) {
        for (int j = 0; j < moleGrid[0].length; j++) {
            if (j == 0 || j % (moleGrid.length - 1) != 0) {
                System.out.print(moleGrid[i][j]);
            }
            else {
                System.out.println(moleGrid[i][j]);
            }
         }
     }
}

希望有帮助!

答案 9 :(得分:0)

更简单的方法,使用Java 5样式进行循环

Integer[][] twoDimArray = {{8, 9},{8, 10}};
        for (Integer[] array: twoDimArray){
            System.out.print(array[0] + " ,");
            System.out.println(array[1]);
        }