Segue a resolução do exercício proposto.
Classe Titulo:
package br.com.alura.screenmatch.modelos;
import br.com.alura.screenmatch.calculos.Classificavel;
public class Titulo {
private String nome;
private int anoDeLancamento;
private int duracaoEmMinutos;
private boolean incluidoNoPlano;
private double somaDasAvaliacoes;
private int totalDeAvaliacoes;
public Titulo(String nome, int anoDeLancamento) {
this.nome = nome;
this.anoDeLancamento = anoDeLancamento;
}
public String getNome() {
return nome;
}
public int getAnoDeLancamento() {
return anoDeLancamento;
}
public int getDuracaoEmMinutos() {
return duracaoEmMinutos;
}
public boolean isIncluidoNoPlano() {
return incluidoNoPlano;
}
public int getTotalDeAvaliacoes() {
return totalDeAvaliacoes;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setAnoDeLancamento(int anoDeLancamento) {
this.anoDeLancamento = anoDeLancamento;
}
public void setDuracaoEmMinutos(int duracaoEmMinutos) {
this.duracaoEmMinutos = duracaoEmMinutos;
}
public void setIncluidoNoPlano(boolean incluidoNoPlano) {
this.incluidoNoPlano = incluidoNoPlano;
}
public double pegaMedia() {
if (totalDeAvaliacoes != 0) {
return somaDasAvaliacoes/totalDeAvaliacoes;
} else {
return 0.0;
}
}
public void avalia(double avaliacao){
somaDasAvaliacoes += avaliacao;
totalDeAvaliacoes++;
}
@Override
public String toString() {
return "Nome Título: " + getNome() +
", Ano de Lançamento: " + getAnoDeLancamento() +
", Duração em minutos: " + getDuracaoEmMinutos() +
", Avaliação: " + pegaMedia();
}
}
Classe Filme:
package br.com.alura.screenmatch.modelos;
import br.com.alura.screenmatch.calculos.Classificavel;
public class Filme extends Titulo implements Classificavel {
private String diretor;
public Filme(String nome, int anoDeLancamento) {
super(nome, anoDeLancamento);
}
public Filme(String nome, String diretor, int anoDeLancamento, int duracaoEmMinutos) {
super(nome, anoDeLancamento);
this.setDuracaoEmMinutos(duracaoEmMinutos);
this.setDiretor(diretor);
}
public String getDiretor() {
return diretor;
}
public void setDiretor(String diretor) {
this.diretor = diretor;
}
@Override
public int getClassificacao() {
return (int) pegaMedia()/2;
}
@Override
public String toString() {
return "\n[Filme: " + this.getNome() + "(" + this.getAnoDeLancamento() + "), " +
"diretor: " + this.diretor + ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
}
}
Classe Main:
import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.screenmatch.calculos.FiltroRecomendacao;
import br.com.alura.screenmatch.modelos.Episodio;
import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
System.out.println("ArrayList de Filmes:");
Filme filme1 = new Filme("Forest Gump","Robert Zemeckis", 1994, 142);
Filme filme2 = new Filme("Ant Z", "Eric Darnell, Lawrence Guterman, Tim Johnson", 1998,83);
Filme filme3 = new Filme("O Nome da Rosa", "Jean-Jacques Annaud", 1986, 130);
ArrayList<Filme> filmes = new ArrayList<>();
filmes.add(filme1);
filmes.add(filme2);
filmes.add(filme3);
System.out.println("Filmes: " + filmes);
}
}
Output:
ArrayList de Filmes:
Filmes: [
[Filme: Forest Gump (1994), diretor: Robert Zemeckis, duração: 142 minutos],
[Filme: Ant Z (1998), diretor: Eric Darnell, Lawrence Guterman, Tim Johnson, duração: 83 minutos],
[Filme: O Nome da Rosa (1986), diretor: Jean-Jacques Annaud, duração: 130 minutos]]
Process finished with exit code 0