ArrayList.get()返回空值[重复]

问题描述 投票:0回答:1

我开始使用java,但我遇到了一个问题:我创建了一个数组lsit,并向其添加对象。

我创建了一个数组lsit,并在其中添加对象。然后我创建了一个方法来返回这个对象,但是这个方法返回的是一个 "null "值。我不知道如何解决这个问题。这里是错误。

Exception in thread "main" java.lang.NullPointerException
    at StarSystem.getPlanetString(StarSystem.java:29)
    at StartActivity.main(StartActivity.java:9)

下面是代码:

Main: 在这里我只是在屏幕上显示数据。

import java.util.Objects;

public class StartActivity {


    public static void main(String[] args) {
        StarSystem starSystem = new StarSystem();

        starSystem.getPlanetString();

    }
}

Planet: 这个类是用来创建行星的。

public class Planet {

    final double planetMinRadius = 1000;
    final double planetMaxRadius = 100_000;
    double temperature;
    double powerReceived; 
    int radius;

    public Planet() {
        radius = 1247;      
    }

    public int getRadius() {
        return radius;
    }

}

星系:在这个类中,我生成了一个星系对象,并希望将其与行星列表联系起来。

import java.util.ArrayList;

public class StarSystem {


    final int minNumberPlanet = 3;
    final int maxNumberPlanet = 10; //10 
    int numberPlanets = 5;
    double positionX, positionY;
    ArrayList<Planet> planets;


    public StarSystem() {
        ArrayList<Planet> planets = new ArrayList<Planet>(numberPlanets);       

        for (int planetPosition = 0 ; planetPosition < numberPlanets ; planetPosition++) {
            Planet planetToAdd = new Planet();
            System.out.println("planetToAdd.toString :" + planetToAdd);
            planets.add(planetToAdd);
            Planet p = planets.get(planetPosition);
            System.out.println("p.toString : " + p);
        }
    }


    public void getPlanetString() {
        System.out.println("TEST");
        Planet a = planets.get(1);
        System.out.println("a.toString" + a);
    }


}

谢谢你的帮助

java list arraylist null add
1个回答
-1
投票

我看你的代码没什么问题。我怀疑你的问题在于你没有给我们看的代码。

我们可以把这作为调试101的一课。

不要把代码的子句组合起来,因为那会使调试变得困难。另一个好处是,Java编译器可以更好地优化。所以把你的新星球实例化和添加到列表中分开。

丢进一些 println 调用来查看你的值的运行情况。

顺便说一下,当你知道一个列表中可能存在的元素数量时,可以指定这个数量作为初始容量。

numberPlanets = determineNumberOfPlanets();
System.out.println( "numberPlanets: " + numberPlanets ;
ArrayList<Planet> planets = new ArrayList<Planet>( numberPlanets );

for (int planetPosition = 0 ; planetPosition < numberPlanets ; planetPosition++) 
{
    Planet p = new Planet() ;
    System.out.println( "planetPosition: " + planetPosition ;
    System.out.println( "p.toString(): " + p ) ;
    planets.add( p );
    Planet p2 = planets.get( planetPosition ) ;
    System.out.println( "p2.toString(): " + p2 ) ;
}

将你的代码写成 速成. 每当在代码块之间交接对象时,都要检查它们的有效性。

Java提供了一些方便的实用方法来检查空值。方法 Objects.requireNonNull 返回你传递的第一个参数,除非为空。如果为空,则该实用程序会抛出一个异常。要自定义该异常的信息,请传递一个信息字符串作为第二个参数。

Planet p2 = Objects.requireNonNull( planets.get( planetPosition ) ) ;  // Another way to check for null. Throws exception if null. 
© www.soinside.com 2019 - 2024. All rights reserved.