1
resposta

[Projeto] Resolução do desafio "Registro de notas"

import java.util.ArrayList;
import java.util.List;

public class Disciplina {
    private String nome;
    List<Double> notas;
    private double somaDasNotas;
    private int notasValidas;

    public Disciplina(String nome) {
        this.nome = nome;
        this.notas = new ArrayList<>();
        this.somaDasNotas = 0;
        this.notasValidas = 0;
    }

    public void adicionarNota(double nota) {
        notas.add(nota);
        System.out.println("Nota adicionada à lista de notas da disciplina.");
    }

    public double calcularMedia() {
        if (notas.isEmpty()) {
            return 0;
        } else {
            for (double nota : notas) {
                if (nota < 0 || nota > 10) {
                    continue;
                }
                this.somaDasNotas += nota;
                this.notasValidas++;
            }

            return this.somaDasNotas / this.notasValidas;
        }
    }

    public void exibirInformacoes() {
        for (double nota : notas) {
            if (nota < 0 || nota > 10) {
                System.out.println("Nota inválida ignorada: " + nota);
            }
        }

        System.out.printf("""
                Total de notas válidas: %d
                Média em %s: %.2f
                """, this.notasValidas, this.nome, calcularMedia());
    }
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Digite o nome da disciplina: ");
        Disciplina disciplina = new Disciplina(scanner.nextLine());

        do {
            System.out.println("Deseja adicionar uma nota à lista de notas da disciplina (\"sim\"/\"não\")? ");
            String entrada = scanner.nextLine();

            if (entrada.equalsIgnoreCase("sim")) {
                System.out.println("Digite a nota a ser adicionada: ");
                disciplina.adicionarNota(scanner.nextDouble());
                scanner.nextLine();
            } else if (entrada.equalsIgnoreCase("não")) {
                disciplina.calcularMedia();
                break;
            }
        } while (true);

        System.out.println("Informações da disciplina: ");
        disciplina.exibirInformacoes();
    }
}
1 resposta

Oi, Lucas! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da sua organização com a classe Disciplina e o uso de List<Double> para armazenar as notas. A validação das notas dentro do for também mostra uma boa preocupação com dados inválidos. Um ponto de atenção é que somaDasNotas e notasValidas continuam acumulando a cada chamada de calcularMedia, o que pode gerar resultados incorretos se o método for chamado mais de uma vez.

Uma dica interessante para o futuro é reiniciar esses valores antes do cálculo da média, evitando esse acúmulo indesejado.


double soma = 0;
int contador = 0;

for (double nota : notas) {
    if (nota >= 0 && nota <= 10) {
        soma += nota;
        contador++;
    }
}

double media = contador == 0 ? 0 : soma / contador;

Esse código percorre a lista, soma apenas notas válidas e calcula a média com segurança.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!