2011-09-01 60 views
1

我被优化的应用程序,并想改变我的for循环,以增强循环:如何用增强型for-loop初始化一个数组?

来源:

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)相同的结果。

回答

1

如果增强for语句中的数组引用(在这种情况下为'Wasberen')为空,则执行该语句时将生成NullPointerException

+0

所以我用'for'进行初始化,并在增强循环的后期阶段进行迭代?因为'wasberen'在初始化后已经存在 – Mars

+0

可能会抛出NullPointerException,因为您的代码片段来自Wasbeer no-arg构造函数,或者'r'也是空引用。异常的堆栈跟踪应识别罪魁祸首。 –

1

对于初始化数组,您应该坚持以前的语法。

+0

a [i] = new Object();不等于对象b = a [i]; b = new Object(); – bitle

0

您不能在Java中使用增强型for-loop来填充数组。 (我假设你Wasberen阵列已经创建之前 - 如果不是,这将让你在这两个变种一个NullPointerException)

你的代码(简化)

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

相当于

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

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