-5

为什么我会收到错误???我用eclipse,报错

在 AcmeVideo.main(AcmeVideo.java:8) 的 Shopping_Booket.Movie_assign(Shopping_Booket.java:8) 的线程“主”java.lang.NullPointerException 中的异常

编码:

public class AcmeVideo {

    public static void main(String[] args) {
        Shopping_Booket shop = new Shopping_Booket();
        shop.Movie_assign();
    }
}

public class Shopping_Booket {

    movie[] MovieArray = new movie[5];

    public void Movie_assign() {

        MovieArray[0].Assign("Batman Dark Knight Return", 8, 2012, 22);
        MovieArray[1].Assign("Fringe", 9.2, 2008, 40);
        MovieArray[2].Assign("V for Vandetta", 8, 2005, 28);
        MovieArray[3].Assign("X man First Class", 7, 2005, 30);
        MovieArray[4].Assign("Hulk", 8.5, 2000, 16);
        System.out.println(MovieArray[2].Title);
    }
}

public class movie {

    public String Title;
    public double Rating;
    public int Year;
    public double Price;

    public void Assign(String title, double rating, int year, double price) {
        this.Title = title;
        this.Rating = rating;
        this.Year = year;
        this.Price = price;
    }

    public void Displayİnfo() {
        System.out.println("Title = " + Title);
        System.out.println("Year = " + Year);
        System.out.println("Rating = " + Rating);
        System.out.println("Price = " + Price);
        System.out.println("-------------------------------------");
    }
}
4

2 回答 2

4

您已经创建了一个数组,但您从未创建过实例。您的数组只是一个空对象数组。

movie [] MovieArray=new movie [5];

目前movie看起来像这样:

{null, null, null, null, null}

你需要做的是向它添加一些实例。

MovieArray[0] = new Movie(// etc);

只是要注意

Java 命名约定规定,不是常量的变量必须以小写字母开头,并且所有后续单词都以大写字母开头。

MovieArray -> movieArray
于 2013-04-27T15:25:39.050 回答
3

本声明:

movie [] MovieArray=new movie [5];

... 创建一个包含 5 个元素的新数组,但每个元素一开始都是空的。您从未真正创建movie()该类的新实例。相反,您Assign每次都在空引用上调用您的方法 - 这就是导致异常的原因。

有关数组的更多信息,请参阅 Java 教程的数组部分。

您应该将Assign方法更改为构造函数,然后编写:

MovieArray[0] = new movie("Batman Dark Knight Return", 8, 2012, 22);

然后,您绝对应该阅读Java 命名约定

  • 你的课应该是Movie,不是movie
  • 您的变量应以小写字母 ( title, not Title)开头
  • 同上你的方法:displayInfo

我还强烈建议您使用私有字段而不是公共字段。

于 2013-04-27T15:25:47.247 回答