Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Atividade.

Codígo da classe "Filme":

public class Filme {
    String nome;
    int anoDeLancamento;
    int duracaoEmMinutos;
    boolean incluidoNoPlano;
    int somaDasAvaliacoes;
    int totalDeAvaliacoes;
    void exibeFichaTecnica() {
        String ficha = """
                Nome do filme: %s
                Ano  de lançamento: %d      Duração em minutos: %d
                """.formatted(nome, anoDeLancamento, duracaoEmMinutos);
        System.out.println(ficha);
    }

    void exibeIncluidoNoPlano() {
        if (incluidoNoPlano == true){
            System.out.println("Este filme está incluído no plano ScreenMatch+");
        } else {
            System.out.println("Você precisa renovar seu plano para assistir este filme.");
        }
    }

    void avalia(int nota) {
        somaDasAvaliacoes += nota;
        totalDeAvaliacoes++;
    }

    double pegaMedia() {
        double media = somaDasAvaliacoes / 3;
        return media;
    }

    void exibeMedia() {
        System.out.println("Média de avaliações: " + pegaMedia());
    }
}

. Código do main "Principal":

public class Principal {
    public static void main(String[] args) {
        Filme meuFilme = new Filme();
        meuFilme.nome = "Django Livre";
        meuFilme.anoDeLancamento = 2012;
        meuFilme.duracaoEmMinutos = 147;
        meuFilme.incluidoNoPlano = true;

        meuFilme.avalia(7);
        meuFilme.avalia(9);
        meuFilme.avalia(10);

        meuFilme.exibeFichaTecnica();
        meuFilme.exibeMedia();
        meuFilme.exibeIncluidoNoPlano();
    }
}

Preciso explicação sobre a criação de métodos, fiquei um pouco confuso quando fui fazer um método que não é void, tipo double por exemplo. No caso void é um "argumento" que não possui retorno, ele só executa oque está entre as suas chaves{}?Isso? E nos outros casos métodos criados com "int, double, boolean" tipos primitivos no geral??

2 respostas
solução!

Olá,

no método:

    double pegaMedia() {
        double media = somaDasAvaliacoes / 3;
        return media;
    }
  • double refere-se ao tipo de retorno previsto para o método. Ou seja, estamos indicando que o resultado do processamento executado entre as chaves, será um valor do tipo double.
  • argumentos é o que vc passa para o método.
  • parâmetros é o que vc recebe no método.

Dito isso, sabemos que temos um método que não recebe argumentos, pois não foram declarados parâmetros na sua assinatura. O tipo de retorno declarado na assinatura do método define o tipo que o método deverá retornar, ou seja, o tipo da variável que deverá seguir a palavra return.

Especificamente no caso do método acima, temos algumas insconsistências. Nada que impedirá o programa rodar, mas que pode ser melhorado.

O método retorna o resultado da variável de instância somaDasAvaliacoes / 3. Em Java a divisão de números inteiros sempre retornará um valor inteiro. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Perceba como a IDE grifa a divisão, alertando sobre a necessidade de cast para um valor de ponto flutuante, pois estamos atribuindo o resultado da operação a uma variável do tipo double.

Se qualquer um dos valores envolvidos na operação for um ponto flutuando, o cast não é mais necessário.

    double test(int dividendo, int divisor) {
        // aqui estamos fazendo um cast do valor inteiro para um float antes da operação.
        double valor = dividendo / (double)divisor;
        return  valor;
    }

Como sugestão, para sua classe Filme, seria alterar os tipos da nota e somaDasAvaliacoes para um tipo double. Pois assim, não sofreriam perca de precisão.

Até +.

Obrigado.