【问题标题】:How to initialize dynamically a 2d object array如何动态初始化二维对象数组
【发布时间】:2012-10-15 10:22:29
【问题描述】:

我在尝试实现一个动态初始化二维对象数组的方法时有点卡住了。

我知道使用 hashmap 进行双括号初始化,但在这种情况下,我不想这样做,我想学习如何手动进行。我知道一定有办法。

这就是我目前所拥有的,但不正确:

return new Object[][] {
                          {
                              buildNewItem(someValue),
                              buildNewItem(someValue),
                              buildNewItem(someValue),
                              buildNewItem(someValue),
                              buildNewItem(someValue),
                           }    
};

如您所见,我遗漏了应代表行 (0,1,2,3...) 的第一个维度的值的分配。

你能帮我看看如何完成这个初始化吗? 在 return 语句之前创建对象不是一种选择,我想在旅途中做,所有这些都作为一个 return 语句。

【问题讨论】:

    标签: java arrays object initialization


    【解决方案1】:

    类似这样的:

        return new Object[][] {new Object[]{}, new Object[]{}};
    

    【讨论】:

      【解决方案2】:

      您的代码是正确的,但它仅适用于第 0 行。 您可以使用{}添加更多行

      static int count = 0;
      public static Integer buildNewItem() {
          return count++;
      }
      public static void main(String[] args) {
      
          System.out.println(Arrays.deepToString(new Object[][]{
                  {buildNewItem(), buildNewItem(), buildNewItem()},
                  {buildNewItem(), buildNewItem(), buildNewItem()} <--Use {} to separate rows
                                 }));
      
      }
      

      输出:

      [[0, 1, 2], [3, 4, 5]]
      

      【讨论】:

        【解决方案3】:

        手动:

        Object[][] obj = new Object[ROWS][COLS];
        for(int i = 0 ; i < ROWS ; i++) {
            for(int j = 0 ; i < COLS; j++) {
                obj[i][j] = buildNewItem(someValue);
            }
        }
        

        【讨论】:

        • 这不是动态的,因为您指定了行和列。
        • @sfrj 是的,我需要先初始化。无论如何,声明一个对象然后初始化它并不痛苦。
        • 我理解您的观点,但您的解决方案不适用于当前场景,因为您的索引是固定的。如果数组满了,还想输入更多的数据,就得增加索引。
        • @sfrj 数组总是有固定的尺寸。这与它的初始化方式无关。如果你想要动态大小的数组,你需要 ArrayList 或其他类型的集合。
        • 我知道。但尽管如此,有一种技术称为数组的动态初始化。这意味着是的,这些索引将是固定的,但您不需要指定索引的长度,因为它们将根据初始化时传递的对象数量来定义。你举的例子不正确。
        猜你喜欢
        • 2012-01-27
        • 2021-02-22
        • 1970-01-01
        • 2017-07-23
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 2012-07-12
        相关资源
        最近更新 更多