如何初始化对象数组?

时间:2015-12-07 04:05:12

标签: java

所以我有这个对象数组,我想初始化它,所以当我使用对象访问器函数时,当用户没有输入足够的数据来填充数组的每个元素时,它不会抛出nullpointerexceptions。

这是代码,我正在讨论的数组是planetArray:

import java.util.*;
public class SolarSystem{
    public static final int PLANET_MAX = 10;
    public int planetCount = 0;
    Planet[] planetArray = new Planet[PLANET_MAX];
    String systemName;  
    public SolarSystem(String name){
        this.systemName = name;
        }
    }

    public void addPlanet(String planetName, double planetMass, double planetDistance){
        double mass = Math.round(planetMass*1000)/1000.0;
        double distance = Math.round(planetDistance*1000)/1000.0;
        Planet newPlanet = new Planet(planetName, mass, distance);
        newPlanet.calculatePeriod(planetDistance);
        planetArray[planetCount] = newPlanet;
        planetCount++;
    }

    public String toString(){
        String myString = systemName + "\n";
        for(int i = 0; i < PLANET_MAX; i++){
            String name = planetArray[i].getPlanetName();
            double mass = planetArray[i].getPlanetMass();
            double distance = planetArray[i].getPlanetDistance();
            double period = planetArray[i].getPlanetPeriod();
            if(period <= 1){
                period = period * 365.25;
                period = Math.round(period*1000)/1000.0;
                myString = myString + "Planet " + name + " has a mass of " + mass + " Earths, is " + distance + "AU from its star, and orbits in " + period + " days\n";
            }
            else{
                period = Math.round(period*1000)/1000.0;
                myString = myString + "Planet " + name + " has a mass of " + mass + " Earths, is " + distance + "AU from its star, and orbits in " + period + " years\n";
            }
        }
        return myString;
    }

    //accessors
    public Planet[] planetArray(){
        return planetArray;
    }
    public String getSystemName(){
        return systemName;
    }
    //mutators
    public void setPlanetArray(Planet[] planetArray){
        this.planetArray = planetArray;
    }
    public void setSystemName(String systemName){
        this.systemName = systemName;
    }

}

如果我使用for循环尝试循环遍历数组以使用mutator函数来设置对象的值,我会返回nullpointerexceptions。如果数组没有完全填充,我会得到nullpointerexceptions。用户能够将数据输入到阵列中,直到他们决定完成为止,这是一个很大的要求。如何将整个数组设置为不会抛出这些异常的值?

编辑:一个例子是:

public SolarSystem(String name){
    this.systemName = name;
    for(int i = 0; i < PLANET_MAX; i++)
        planetArray[i].setPlanetName("/0");
    }
}

我希望能够将行星名称设置为null,但尝试执行任何操作只会获得nullpointerexceptions。

2 个答案:

答案 0 :(得分:0)

这是一回事。你

for(int i = 0; i < PLANET_MAX; i++) {   
    if(planetArray[i]==null) 
        continue;
    planetArray[i].setPlanetName("/0");
}

另一个评论员是对的,列表对于这类事情来说更方便。

答案 1 :(得分:0)

从风格,共同实践的观点来看,你真的不想做你的建议。也就是说,实际上没有人插入非零虚拟对象或值来表示“尚未设置”&#39;或者未提供&#39;。

使用 java null 几乎完全意味着&#39; unset&#39;,&#39;未提供&#39;或者&#39;不适合这种用途。发明一种新机制会使代码的意图变得混乱,如果其他人使用您的代码,可能会造成严重破坏。

虽然一直检查空值似乎很难,但Java最佳实践要求:

  1. 如果obj不为null,则它是一个有效的obj,可以在您的cacluation,operation,view,use queries等中使用和合并。

  2. 您清理来自用户,上传,CGI参数以及您无法控制的任何内容的任何输入。任何无效或缺失的值都将变为null,以免干扰您的其他程序。

  3. 如果从控制范围以外的组件调用了params和值为null,或者没有经过彻底的检查或检查,那么甚至是一个好主意。

  4. 这些实践可以显着提高代码的安全性,可靠性和使用寿命。对于详细的答案&#39;抱歉。