【问题标题】:How can I initialize an array with an enhanced for-loop?如何使用增强的 for 循环初始化数组?
【发布时间】:2011-11-08 15:10:36
【问题描述】:

我正在优化应用程序并想将我的 for 循环更改为增强循环:

发件人:

for (int m = 1;m < MAX_BEREN;m++)
{           
    Wasberen[m] = new Wasbeer();       
    Wasberen[m].YYY = r.nextInt(SchermY - 28);
}

到:

for (Wasbeer a : Wasberen)
{
    if (a!=null)
    {
       a = new Wasbeer();
       a.YYY = r.nextInt(SchermY - 28);
    }
}

我得到一个 NullPointerException,因为它可能不知道 'beren' 可以包含多少 数组,但我不确定如何管理与上面的循环相同的循环 (MAX_BEREN = 11)。

【问题讨论】:

    标签: java android arrays for-loop foreach


    【解决方案1】:

    如果增强的 for 语句中的数组引用(本例中为“Wasberen”)为空,则执行该语句时将产生一个NullPointerException

    【讨论】:

    • 所以我用'for'初始化并在后期使用增强循环进行迭代?因为“wasberen”在 init 之后已经存在
    • NullPointerException 可能会被抛出,给定您的 sn-p,从 Wasbeer 无参数构造函数或者如果 'r' 也是一个空引用。异常的堆栈跟踪应确定罪魁祸首。
    【解决方案2】:

    为了初始化数组,你应该坚持以前的语法。

    【讨论】:

    • a[i] = new Object();不等于对象 b = a[i]; b = 新对象();
    【解决方案3】:

    您不能在 Java 中使用增强的 for 循环来填充数组。 (我假设您的 Wasberen 数组之前已经创建过 - 如果没有,这将在两个变体中为您提供 NullPointerException。)

    您的代码(简化)

    for (Wasbeer a : Wasberen)
    {
        a = ...;
    }
    

    等价于

    for (int i = 0; i < Wasberen.length; i++)
    {
        Wasbeer a = Wasberen[i];
        a = ...;
    }
    

    这个赋值会改变局部变量a,但不会影响数组的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      相关资源
      最近更新 更多