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

[Dúvida] Como melhorar o código?

No último sout eu peço para que a mediaAvaliacao seja dividida por 3, tem como eu deixar somente um mediaAvaliacao no sout e ele já saber por quantas notas ele vai ter que dividir para calcular a média? Queria que o código já soubesse por quantas notas ele precisa dividir.

public class Loop {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        double mediaAvaliacao = 0;
        double nota = 0;

        for (int i = 0; i <= 2; i++) {
            System.out.println("Qual sua nota para o filme?");
            nota = leitura.nextDouble();
            mediaAvaliacao = mediaAvaliacao + nota;
        }
        System.out.println("A média é " + mediaAvaliacao/3);

    }
}
2 respostas

Fala Luiz, beleza?

Pelo que eu entendi você quer deixar na impressão algo como

System.out.println("A média é " + mediaAvaliacao);

ou seja, sem fazer a divisão nesse momento, certo?

Uma solução possível é ter uma variável que controla a quantidade de avaliações que nós temos dentro do programa, podemos declarar ela, supondo que se mantenha com 3 avaliações, da seguinte maneira:

int quantidadeDeAvaliacoes = 3;

Agora que temos um controle de quantas avaliações vamos receber, é interessante modificar nosso laço de repetição para ficar condizente e ler esse número de avaliações:

for (int i = 0; i < quantidadeDeAvaliacoes; i++) {
            System.out.println("Qual sua nota para o filme?");
            nota = leitura.nextDouble();
            mediaAvaliacao = mediaAvaliacao + nota;
        }

Note que agora faremos a leitura referente à quantidade de avaliações guardada na variável int.

Por fim, ao final do laço podemos fazer o cálculo da média da seguinte forma:

mediaAvaliacao = mediaAvaliacao / quantidadeDeAvaliacoes;

Note que agora como usamos uma variável para guardar a quantidade, basta alterar seu valor para receber mais avaliações e calcular a média corretamente!

Assim, podemos substituir no código e deixar a impressão apenas como

System.out.println("A média é " + mediaAvaliacao);

Fica como desafio receber do usuário a quantidade de avaliações que vai ser lida, e brincar um pouco com o código para testar seu funcionamento! =)

Espero ter ajudado. Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Na verdade eu queria que ele dividisse pela quantidade de notas sem que eu pre cisasse declarar de inicio quantas notas eu pretendo fornecer. A solução que eu buscava foi apresentada no exercício seguinte, em que cada vez que ele lia uma nota, 1 era adicionado a quantidade total de notas. Mas obrigado por reforçar. Segue a solução:

import java.util.Scanner;
public class OutroLoop {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        double mediaAvaliacao = 0;
        double nota = 0;
        double i = 0;
        int totalDeNotas = 0;

        while (nota != -1) {
            System.out.println("Diga sua avaliação para o filme ou -1 para encerrar");
            nota = leitura.nextDouble();

            if (nota != -1) {
                mediaAvaliacao += nota;
                totalDeNotas++;
            }
        }
        System.out.println("Média de avaliações " + mediaAvaliacao/totalDeNotas);

    }
}