1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Resolver NullPointerException

Discussão em 'Programação' iniciada por Bijel, 13 de Julho de 2018 às 03:30. (Respostas: 2; Visualizações: 225)

  1. Bijel

    Bijel Suspenso

    Código:
    package pt.ulusofona.deisi.aedProj2018;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.util.HashMap;
    
    
    public class Main{
       
        //Declaração das variáves estáticas
            static  int resultado;
            static ArrayList<Filme>filmes = new ArrayList<>();
            static HashMap<Integer, Filme> filmesRepetidos;
            static HashMap<Integer, ArrayList<Filme>> dic_do_Ano;//dicionário do ano
            static HashMap<Integer,Actor> lista_dos_Atores ;
            static ArrayList<GNC> lista_dos_Generos;
           
        public static void main(String[] args) {
            parseMovieFiles();
            ArrayList<Filme> invocar = getMovies();
             resultado = countMoviesYear(1890);
            System.out.println("O resultado é ->" + resultado);
           
        }
       
       
        public static void parseMovieFiles() {
            //Inicialização de algumas variáveis
            filmesRepetidos = new HashMap<Integer, Filme> ();
            dic_do_Ano = new HashMap<Integer, ArrayList<Filme>>();
            filmes = new ArrayList<Filme>();
            filmes = new ArrayList<Filme>();
            lista_dos_Atores = new HashMap<Integer, Actor>();
            lista_dos_Generos = new ArrayList<GNC>();
                   
            String nomeFicheiroFilme = "deisi_movies.txt";
            String nomeFicheiroAtor = "deisi_actors.txt";
            String nomeFicheiroGenero = "deisi_genres.txt";
           
            //Leitura do Ficheiro Filmes
            try {
                File ficheiro = new File(nomeFicheiroFilme);
                Scanner leitorFicheiro = new Scanner(ficheiro);
    
                // enquanto o ficheiro tiver linhas não-lidas
                while(leitorFicheiro.hasNextLine()) {
                    // ler uma linha do ficheiro
                    String linha = leitorFicheiro.nextLine();
                    // partir a linha no caractere separador
                    String dados[] = linha.split(",");
                    if (dados.length == 7){
                       
                       
                            int id = Integer.parseInt(dados[0]);
                            String titulo = dados[1];
                            String data = dados[2];
                           
                            String date[] = data.split("-");
                            int ano = Integer.parseInt(date[0]);
                           
                            int orcamento = Integer.parseInt(dados[3]);
                            float duracao = Float.parseFloat(dados[4]);
                            float mediaVotos = Float.parseFloat(dados[5]);
                            int nrVotos = Integer.parseUnsignedInt(dados[6]);
                            HashMap<String,Actor>ator = new HashMap<>();
                            ArrayList<GNC> generos = new ArrayList<>();
                           
                            Filme filme = new Filme(id,titulo, data, orcamento,duracao, mediaVotos, nrVotos, ator, generos);
                           
                        if(filmesRepetidos.get(id)==null){
                            filmesRepetidos.put(id,filme);
                            ArrayList<Filme> lista = new ArrayList<>();
                           
                            if (dic_do_Ano.get(ano) == null) {
                                lista.add(filme);
                                dic_do_Ano.put(ano, lista);
                               
                            } else {
                                lista = dic_do_Ano.get(ano);
                                lista.add(filme);
                                dic_do_Ano.put(ano, lista);
                            }
                            filmes.add(filme);
                        }
                    }
    
                }
           
    
                leitorFicheiro.close();
                System.out.println("Tamanho dicionario: " + dic_do_Ano.size());
         }
         catch(FileNotFoundException exception) {
               String mensagem = "Erro: o ficheiro " + nomeFicheiroFilme + " nao foi encontrado.";
               System.out.println(mensagem);
       
         }
           
            //Leitura do Ficheiro Atores
            try {
               
                File ficheiro = new File(nomeFicheiroAtor);
                Scanner leitorFicheiro = new Scanner(ficheiro);
             
                // enquanto o ficheiro tiver linhas não-lidas
                while(leitorFicheiro.hasNextLine()) {
                    // ler uma linha do ficheiro
                    String linha = leitorFicheiro.nextLine();
                    // partir a linha no caractere separador
                    String dados[] = linha.split(",");
                    if (dados.length == 4){
                        int idActor = Integer.parseInt(dados[0]);
                        String nomeActor = dados[1];
                        Boolean sexo = Boolean.parseBoolean(dados[2]);
                        int idFilme = Integer.parseInt(dados[3]);
    
                        Actor actorTemp = null;
                        //Ja tenho um objecto que represente este actor?
                        //Percorrer a lista de retorno para saber se tem actores repetidos
                        //Compara os objetos da lista de retorno e compara com o objecto que se pretende inserir
                        if(lista_dos_Atores.get(idActor) == null){
                            actorTemp = new Actor(idActor,nomeActor,sexo,idFilme);
                            lista_dos_Atores.put(idActor, actorTemp);
                        }else{
                            actorTemp = lista_dos_Atores.get(idActor);
                        }
                        Filme filme=filmesRepetidos.get(idFilme);
                        if(filme!=null){
                            filme.actores.put(actorTemp.nomeAtor,actorTemp);//adicionar o actor ao filme
                        }
    
                    }
                   
                }
               
                 leitorFicheiro.close();
            }
           
            catch(FileNotFoundException exception) {
                String mensagem = "Erro: o ficheiro " + nomeFicheiroAtor + " nao foi encontrado.";
                System.out.println(mensagem);
            }
           
        //Leitura do Ficheiro Géneros (GNC)
            try {
               
                File ficheiro = new File(nomeFicheiroGenero);
                Scanner leitorFicheiro = new Scanner(ficheiro);
               
                //enquanto o ficheiro tiver linhas não-lidas
                while(leitorFicheiro.hasNextLine()) {
                   
                    // ler uma linha do ficheiro
                    String linha = leitorFicheiro.nextLine();
                    // partir a linha no caractere separador
                    String dados[] = linha.split(",");
                    if (dados.length == 2){
                        String nomeGenero = dados[0];
                        int idFilmes = Integer.parseInt(dados[1]);
                        GNC gen = new GNC(nomeGenero, idFilmes);
                        lista_dos_Generos.add(gen);
    
                        //Procurar na lista filmes o idFilme deste objecto
                        Filme filme=filmesRepetidos.get(idFilmes);
                        if(filme!=null){
                            filme.generos.add(gen);//adicionar o actor ao filme
                        }
                    }
                   
                }
               
                  leitorFicheiro.close();
               
            }
       
            catch(FileNotFoundException exception) {
                String mensagem = "Erro: o ficheiro " + nomeFicheiroGenero + " nao foi encontrado.";
                System.out.println(mensagem);
            }
       
        }   
       
        public static ArrayList<Filme> getMovies(){
            return filmes;
           
        }
       
        public static int countMoviesYear(int ano){
           
            int countMoviesYear = dic_do_Ano.get(ano).size();
    
            return countMoviesYear;   
           
        }
       
       
    
    }
        
     
  2. Slash

    Slash Power Member

    Precisamos de mais detalhes. Onde é lançada a excepção? Stacktrace ? Qual o input ? Isto é mesmo a lei do menor esforço.
     
  3. reise

    reise Power Member

    Tens primeiro de testar se a HashMap dicDoAno tem a key que queres antes de pedires o size().

    E por favor decide-te no tipo de coding guidelines que queres usar.
    Ou tudo inglês (preferivel) ou tudo português
    Ou CamelCase (preferivel) ou _
    E last not least, não uses static para tudo, cria uma classe, instacia e chama os métodos da classe instanciada.
     

Partilhar esta Página