【问题标题】:Create object in java with arrays在java中使用数组创建对象
【发布时间】:2013-12-12 07:41:07
【问题描述】:

好吧,可以说我得到了灯泡类和图片类。 在灯泡中,我得到布尔变量,如果它是真的,灯泡打开,如果不是灯泡关闭,我在默认关闭的构造函数中创建了它,并制作了 2 个方法打开和关闭。 我需要在用户输入的灯泡图片数组中(在他创建对象图片时的主要方法中)数组的长度。 所以可以说这是我的图片类:

private Bulb [] arr ;

Picture(int len)
{   
    Bulb [] arr = new Bulb[len];
}

现在,如果我想在每个单元格上输入灯泡,我需要这样做:

Bulb b = new Bulb();
Bulb c = new Bulb();
Bulb d = new Bulb();

for(int i=0;i<len;i++)
{
    arr[i] = b;
    arr[i] = c;
    arr[i] = d;
}

当然我不能那样做,我现在不知道通过变量 len 创建多少对象。

【问题讨论】:

  • 您目前正在覆盖您对arr[i]所做的每项作业。
  • 为什么需要使用for循环?
  • 为什么不for(int i = 0; i &lt; len; i++) { arr[i] = new Bulb(); }

标签: java arrays class object for-loop


【解决方案1】:

您的代码有几个问题:

  • 您的构造函数创建一个新变量而不是实例化该字段
  • 您的 for 循环将每个灯泡写入相同的索引。你最终会得到一系列“d”灯泡

如果您需要按索引访问灯泡,则使用 List 可能更容易,如果不需要,则使用 Set 可能更容易。

private List<Bulb> bulbs;

Picture(int len)
{   
    bulbs = new ArrayList<Bulb>()
}

然后

Bulb b = new Bulb();
Bulb c = new Bulb();
Bulb d = new Bulb();

bulbs.add(b);
bulbs.add(c);
bulbs.add(d);

然后,例如得到灯泡B:

bulbs.get(1);

【讨论】:

    【解决方案2】:

    我想你会想要一个 ArrayList,它是 List 的可调整大小的数组实现。

    ...
    ArrayList 灯泡 = new ArrayList();
    for(类单元格:单元格) {
    灯泡.add(新灯泡());
    }
    ...

    -或-

    如果您真的希望数字相关的索引稍后将灯泡拉回来:

    ...
    HashMap 灯泡 = 新 HashMap();
    for(int i=0,i 灯泡.put(i,新灯泡);
    }
    ...

    【讨论】:

      【解决方案3】:

      您不必在循环之前创建所有 Bulb 实例,因为您根本不知道需要多少。你为什么不试试像下面这样简单的东西?

      private Bulb [] arr ;
      
      Picture(int len)
      {   
          arr = new Bulb[len];
          for(int i=0;i<len;i++)
          {
              arr[i] = new Bulb();
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用数组的length 属性用灯泡填充数组。

        for(int i = 0; i < arr.length; i++) {
            arr[i] = new Bulb();
        }
        

        【讨论】:

          猜你喜欢
          • 2011-07-18
          • 2020-12-17
          • 1970-01-01
          • 2013-04-30
          • 1970-01-01
          • 2021-07-30
          • 2019-10-28
          • 1970-01-01
          相关资源
          最近更新 更多