方法、构造函数和派生类的问题[重复]

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

我正在从事的项目有 3 个课程。第一堂课我没有问题。我从这个方法派生一个类。我依次从这个派生类调用一个方法到我的主要方法中。具体来说,我在线程“main”中遇到异常,我无法调用我的哈希映射。如果有人能帮助我,我将不胜感激。

这是派生类的代码:

import java.util.HashMap;

public class movieSchedule extends movieEvent {

    private HashMap<String, String[]>movieTimes;

    public movieSchedule() {

        this.movieTimes = movieTimes;
    }

    public void AddMovieSchedule(String name, String[] times) {

        movieTimes(name, times);
    }

    private void movieTimes(String name, String[] times) {
        movieTimes.put(name, times);

    }
}

这是主要方法相关部分的代码:

movieSchedule athensSchedule = new movieSchedule();
    
String[] guardiansTimes = {"5:30 P.M.", "7:20 P.M.", "9:00 P.M."};
athensSchedule.AddMovieSchedule("Guardians 4", guardiansTimes);
    
String[] airTimes = {"6:30 P.M.", "8:45 P.M.", "9:10 P.M."};
athensSchedule.AddMovieSchedule("AIR", airTimes);
    
String[] marioTimes = {"3:30 P.M.", "4:20 P.M.", "5:00 P.M."};
athensSchedule.AddMovieSchedule("Mario", marioTimes);
    
String[] oppenheimerTimes = {"7:30 P.M.", "9:20 P.M.", "10:00 P.M."};
athensSchedule.AddMovieSchedule("Oppenheimer", oppenheimerTimes);
    
String[] insidiousTimes = {"9:30 P.M.", "10:20 P.M.", "11:00 P.M."};
athensSchedule.AddMovieSchedule("Insidious", insidiousTimes); 

这是我得到的错误:

 Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.HashMap.put(Object,    Object)" because "this.movieTimes" is null
java methods nullpointerexception hashmap
2个回答
0
投票

这里的问题是,当您调用

movieSchedule athensSchedule = new movieSchedule();
时,java 转到构造函数,在构造函数中,如果您注意到,您拥有的散列映射等于自身,并且因为您没有初始化它,散列映射为空。所以你需要做的是
this.movieTimes = new HashMap<String, String[]>();


0
投票

基本上,变量“movieTimes”在构造函数中分配给自身。

所以首先,正如@Arun 所说,将 hashmap 作为构造函数参数传递

public MovieSchedule(HashMap<String, String[]> movieTimes) {
        this.movieTimes = movieTimes;
    }
MovieSchedule athensSchedule = new MovieSchedule(new HashMap<>());
String[] guardiansTimes = {"5:30 P.M.", "7:20 P.M.", "9:00 P.M."};
athensSchedule.AddMovieSchedule("Guardians 4", guardiansTimes);

在声明时初始化地图

private HashMap<String, String[]> movieTimes = new HashMap<>();

或 修改默认构造函数代码并将其作为初始化添加为 hashmap

private HashMap<String, String[]> movieTimes ;

public MovieSchedule() {
  this.movieTimes = new HashMap<>();
}

另外请注意,按照命名规则,每个单词的首字母要大写 在这里查看 oracle 文档

© www.soinside.com 2019 - 2024. All rights reserved.