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;
}
}