【问题标题】:Initialize 2D array初始化二维数组
【发布时间】:2012-11-29 18:01:36
【问题描述】:

我正在尝试初始化一个二维数组,其中每个元素的类型都是char。 到目前为止,我只能通过以下方式初始化这个数组。

public class ticTacToe 
{
private char[][] table;

public ticTacToe()
{
    table[0][0] = '1';
    table[0][1] = '2';
    table[0][2] = '3';
    table[1][0] = '4';
    table[1][1] = '5';
    table[1][2] = '6';
    table[2][0] = '7';
    table[2][1] = '8';
    table[2][2] = '9';
}
}

我认为如果数组是 10*10 的话,就是小菜一碟了。 有什么有效的方法吗?

【问题讨论】:

    标签: java multidimensional-array


    【解决方案1】:

    更短的方法是这样做:

    private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};
    

    【讨论】:

    • 不,这种方式在 Eclipse 中不起作用。它温暖了数组常量只能在初始化器中使用
    • 已修复。它已在声明语句中。
    • 注意:完成答案,当引用 table[i][j] 时:i 指第一个数组级别,j 指第二个级别,从零开始 .. 例如在当前示例 table[2 ][0] 指“7”
    • 这就是我需要的!!
    • 我会在 3 和 6 之后中断,使它看起来像一个矩阵。
    【解决方案2】:

    这样的事情怎么样:

    for (int row = 0; row < 3; row ++)
        for (int col = 0; col < 3; col++)
            table[row][col] = (char) ('1' + row * 3 + col);
    

    以下完整的Java程序:

    class Test {
        public static void main(String[] args) {
            char[][] table = new char[3][3];
            for (int row = 0; row < 3; row ++)
                for (int col = 0; col < 3; col++)
                    table[row][col] = (char) ('1' + row * 3 + col);
    
            for (int row = 0; row < 3; row ++)
                for (int col = 0; col < 3; col++)
                    System.out.println (table[row][col]);
        }
    }
    

    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    

    这是可行的,因为 Unicode 中的数字从 \u0030 开始是连续的(这是您从 '0' 得到的)。

    表达式'1' + row * 3 + col(您可以在02 之间变化rowcol)只是给你一个从19 的字符。

    显然,如果您走得更远,这不会给您字符10(因为那是 两个 字符),但它适用于 3x3 情况。您将不得不更改生成数组内容的方法,例如:

    String[][] table = new String[5][5];
    for (int row = 0; row < 5; row ++)
        for (int col = 0; col < 5; col++)
            table[row][col] = String.format("%d", row * 5 + col + 1);
    

    【讨论】:

    • 谢谢!它正在工作,但为什么“(char)('1'+ row * 3 + col)”有效?
    【解决方案3】:

    易于阅读/输入。

      table = new char[][] {
          "0123456789".toCharArray()
        , "abcdefghij".toCharArray()
      };
    

    【讨论】:

      【解决方案4】:

      如果你真的想,你可以使用 for 循环。

      char table[][] table = new char[row][col];
      for(int i = 0; i < row * col ; ++i){
           table[i/row][i % col] = char('a' + (i+1));
      }
      

      或者按照 bhesh 所说的去做。

      【讨论】:

      • 我认为存在不匹配错误,无法将 int 分配给 char 数组的类型
      【解决方案5】:

      您可以遵循 paxdiablo(2012 年 12 月)建议的自动化、更通用的方法:

      for (int row = 0; row < 3; row ++)
      for (int col = 0; col < 3; col++)
          table[row][col] = (char) ('1' + row * 3 + col);
      

      就效率而言,这取决于您的实施规模。 如果只是简单地将 2D 数组初始化为值 0-9,那么在同一个语句中定义、声明和初始化会容易得多,如下所示: private char[][] table = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}};

      或者,如果您打算扩展算法,之前的代码会被证明更加高效。

      【讨论】:

        猜你喜欢
        • 2012-05-20
        • 1970-01-01
        • 2021-02-22
        • 2011-12-08
        • 2012-01-27
        • 2014-06-23
        相关资源
        最近更新 更多