繁体   English   中英

无法调用“”,因为数组为空

[英]Cannot invoke " " because array is null

我需要添加关于 2 个演员的信息,例如他们的姓名、地址和年龄,并且在没有数组的情况下很容易地这样做了,但这是必要的,我不断收到错误消息

“无法调用“TestActor.setName(String)”,因为“actors[0]”在 TestMain.main(TestMain.java:5) 处为空”

这只是我用来测试它的主要测试'''

public class TestMain {
public static void main(String[] args) {
    TestActor[] actor = new TestActor[2];
    //Actor act1 = new Actor(" ", " ", 0);
    actor[0]= ("");
    actor[0].setName("Jack Nicholson");
    actor[0].setAddress("Miami.");
    actor[0].setAge(74);
    actor[0].printAct();
}

这是我正在使用的演员类,我需要从中设置信息

public class TestActor {
    private String name;
    private String address;
    private int age;

    public TestActor(String s, String g, int p) {
        this.name = s;
        this.address = g;
        this.age = p;
    }

    public void setName(String s) {
        name = s;
    }

    public void setAddress(String g) {
        address = g;
    }

    public void printAct() {
        System.out.println("The actor's name is " + name + " and age is " + age + ". They live in " + address);
    }

    public void setAge(int p) {
        age = p;
    }

    public String toString() {
        return "The actor's name is " + name + " and age is " + age + ". They live in " + address;
    }

}

我知道 toString 并没有像我暂时设置的那样做任何事情。 这可能有点乱,我可能完全走错了路。 我能够在不使用数组的情况下相对轻松地做到这一点,但它们有点难倒我,而且我不能 100% 确定前进的方向,而可能不会破坏整个事情。

编译器抱怨是因为您没有正确初始化TestActor对象。 你应该这样做:

actor[0] = new TestActor("Jack Nicholson", "Miami.", 74);
actor[0].printAct();

如果您不想这样做并手动使用 setter,那么您需要在TestActor定义一个默认构造TestActor

public TestActor() {  }

那么你应该能够像这样在你的数组中使用它:

actor[0] = new TestActor();
actor[0].setName("Jack Nicholson");
actor[0].setAddress("Miami.");
actor[0].setAge(74);
actor[0].printAct();

当你创建TestActor[] actor = new TestActor[2]; ,您正在创建一个引用类型对象的数组。 因此, actor[0]actor[1]指的是 null。 首先创建TestActor并将对象分配给数组。 喜欢:

TestActor actorOne = new TestActor("s", "g", 0);
actor[0] = actorOne;

或者

TestActor[] actor = new TestActor[2];
actor[0]= new TestActor ("Jack Nicholson", Miami.", 74);
actor[0].printAct();

您的问题似乎是将 Actor 初始化为空字符串而不是 TestActor 对象:

演员[0] = ("");

而是尝试:

actor[0] = new TestActor("Jack Nicholson", "Miami.", 74);

每个 TestActor 都需要实例化,因此这将实例化 TestActor 并填充您想要的字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM