Java 如何初始化对象数组?

Java 如何初始化对象数组?,java,Java,所以我有这个对象数组,我想初始化它,这样当我使用对象访问器函数时,当用户没有输入足够的数据来填充数组的每个元素时,它不会抛出NullPointerException 这是代码,我说的阵列是planetArray: import java.util.*; public class SolarSystem{ public static final int PLANET_MAX = 10; public int planetCount = 0; Planet[] planetA

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

这是代码,我说的阵列是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;
    }

}
import java.util.*;
公共级太阳能系统{
公共静态最终整型行星_MAX=10;
公共int planetCount=0;
行星[]天文馆=新行星[行星_MAX];
字符串系统名;
公共太阳能系统(字符串名称){
this.systemName=名称;
}
}
public void addPlanet(字符串平面名称、双平面质量、双平面位置){
双质量=数学圆(平面质量*1000)/1000.0;
双倍距离=数学圆(平面距离*1000)/1000.0;
行星newPlanet=新行星(行星名称、质量、距离);
newPlanet.calculatePeriod(planetDistance);
天文馆[planetCount]=新行星;
planetCount++;
}
公共字符串toString(){
字符串myString=systemName+“\n”;
对于(int i=0;i如果(周期是一样的,你

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

另一位评论者是对的,列表对于这类事情更方便。

从文体、常见做法的角度来看,你真的不想做你建议的事情。也就是说,实际上没有人插入非空的虚拟对象或值来表示“尚未设置”或“未提供”

java null几乎只用于表示“未设置”、“未提供”或“不适合此用途”。发明一种新机制会混淆代码的意图,如果其他人使用您的代码,可能会造成严重破坏

尽管始终检查空值似乎很困难,但Java最佳实践规定:

  • 如果obj不为空,则它是一个有效的obj,可以在您的计算、操作、视图、使用查询等中使用和合并

  • 您可以清理用户输入、上载、CGI参数以及任何您无法控制的内容。任何无效或缺失的值都将变为null,以免干扰程序的其余部分

  • 如果参数和值是从您无法控制的组件调用的,或者您没有彻底检查或验证,那么最好检查它们是否为null


  • 这些做法可以显著提高代码的安全性、可靠性和使用寿命。对于冗长的“答案”,我深表歉意。

    可能重复的答案应该能满足您的需要。问题是,答案只显示有人手动将数据输入已知数组大小。我想用空值或0或0填充数组在不知道数组大小的情况下手工操作。如果数组大小未知,请考虑使用列表。在for循环中,可以检查null:<代码>(如果PrimeList.GET(i)!= NULL)执行“< < /代码>”。
    for(int i = 0; i < PLANET_MAX; i++) {   
        if(planetArray[i]==null) 
            continue;
        planetArray[i].setPlanetName("/0");
    }