当前位置: 首页 > 知识库问答 >
问题:

Java类[i]。子类异常无法读取字段“subclass ”,因为类[i]为空[重复]

司空元凯
2023-03-14

谢谢你的关注。让我们直奔问题。

这是我的课程的样子

`

class Moon{
        double distance;
        double angle;
        double diameter;
        String col;
        double centreOfRotationDistance;
        double centreOfRotationAngle;
    }
class Planet{
        double distance;
        double angle;
        double diameter;
        String col;
        Moon moon = new Moon();
    }

`

然而,当我试图访问< code >星球[i]时。像这样,java抛出< code > NullPointerException 。我的代码有什么问题吗?如果是,我该如何修复?

`

System.out.println("Creating planets...");
        String[] colArray = {"red", "orange", "yellow", "green", "blue", "indigo", "violet", "white", "red"};
        for(int i = 0; i < 8; i++){
            planets[i] = new Planet();
            planets[i].distance = 100 + (i * 100);
            planets[i].angle = 0 + (i * 20);
            planets[i].diameter = 20 + (i * 10);
            planets[i].col = colArray[i];
            System.out.println("Planet " + i + " created");
            System.out.println("Creating moon..." + i);
            planets[i].moon.distance = 10 + (i * 5);
            planets[i].moon.angle = 0 + (i * 20);
            planets[i].moon.diameter = i + 2;
            planets[i].moon.col = colArray[i++];
            planets[i].moon.centreOfRotationDistance = (100 + (i * 100))/10;
            planets[i].moon.centreOfRotationAngle = 0 - (i * 20);
        }
        System.out.println("Done creating planets.");
        System.out.println("Creating the sun...");

`

堆起来,以防有用

再次感谢您的阅读/回答

我认为我可能过于雄心勃勃,无法访问正在创建的类并从中获取值。因此,我尝试将代码更改为上面的片段,但没有成功?

问了几个朋友,没有人知道为什么会出错。因此发布

共有1个答案

寇涵容
2023-03-14

这些线是问题所在:

planets[i].moon.col = colArray[i++];
planets[i].moon.centreOfRotationDistance = (100 + (i * 100))/10;

在这些行中的第一行中,您将递增i-这意味着在下一行中,行星[i]引用元素仍然为空的数组索引。

我怀疑仅仅是这一简单的改变就能解决问题:

planets[i].moon.col = colArray[i];

顺便说一句,我还建议更改您的代码以创建一次有关Planet的所有内容,然后将其分配到数组中:

Planet planet = new Planet();
planet.distance = 100 + (i * 100);
planet.angle = 0 + (i * 20);
planet.diameter = 20 + (i * 10);
planet.col = colArray[i];
// etc
planets[i] = planet;

(我还建议使用私有字段,可能还有一个接受一堆值的构造函数,但那是另一回事。)

 类似资料:
  • 我最近--就像今天一样--对学习用Clojure编程产生了兴趣。现在,在安装了最新版本的Java jdk并下载了leiningen脚本之后,我遵循了后者的安装说明,特别是在http://www.lispcast.com/clojure-ubuntu上提供的说明。 现在,在运行并下载相关的jar文件之后,程序退出时会出现一个关于找不到类的错误。该错误如下: 线程“main”java.lang.Exc

  • 你好,我正在为三星Gear创建一个小工具。我用Tizen IDE做可穿戴设备。我关注了他们的youtube tutoria:如何创建基本的集成Gear应用程序。 我尝试在Tizen IDE中构建项目,但出现了一个构建错误: 生成过程中出错。对项目“SimpleSAPConsumer”运行生成器“Web小部件生成器”时出错。构建错误:无法确定图形元素类型,因为文档类为空。这可能是一个投影,请使用EX

  • 问题内容: 以下Java程序平均需要0.50秒至0.55秒的时间运行: 如果我替换为,则需要0.60到0.65秒的时间来运行。怎么会? 我对该程序的每个版本运行了15次,两次交替运行。结果如下: 最快的运行时间比最慢的运行时间长。如果它们具有相同的效率,则发生这种情况的可能性将小于。 问题答案: 字节码的顺序略有不同。 : vs : 乍看之下,这没有什么区别;如果有的话,第二个版本更理想,因为它减

  • 抽象类: 子类:

  • 我有一个java中的练习,它的文本是: 矩阵类表示整数数组。其框架如下:公共类矩阵{private int[]]mat;/*创建一个矩阵对象,其内容由矩阵矩阵表示。*/public Matrix(int[][]mat){…}/*返回由调用该方法的对象表示的矩阵元素之和。*/public int sumElements(){…}/*通过移除行i和列j*/公共子矩阵矩阵(int i,int j){。。

  • 我有这个主代码 这是我的个人课 我不明白当我在InputPerson()类中推送这段代码时,它会显示我输入的人的信息 但当我在Display()类中尝试这样做时,它总是告诉我错误“无法读取数组长度,因为”“为null” 我不知道如何将我在InPutPerson()类中输入的数据传递到Display()类,请帮助我