我开始使用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);
}
}
谢谢你的帮助
我看你的代码没什么问题。我怀疑你的问题在于你没有给我们看的代码。
我们可以把这作为调试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.