1
resposta

Duvidas na resolução do meu código.

Por que não posso usar o AtribuirNota retornando um valor? ex:

public class Avaliacao
{
public string Aluno { get; set; }
public double Nota { get; private set; }

public Avaliacao(string aluno, double nota)
{
    this.Aluno = aluno;
    this.Nota = nota;
}


public double AtribuirNota(double nota)
{
    if (nota >= 0 && nota <= 10)
    {
        return nota;
    }
    else 
    {
        Console.WriteLine("Nota inválida. Somente permitido notas de 0 a 10!");
    }
}

} (erro no compilador)

1 resposta

Olá, Guilherme!

O erro no seu código acontece porque o método AtribuirNota foi definido para retornar um valor do tipo double, mas em uma das condições do if/else, você não está retornando nada.

Quando você tem um if que verifica se a nota é válida (nota >= 0 && nota <= 10), o código retorna a nota. No entanto, no bloco else, você apenas imprime uma mensagem no console com Console.WriteLine. O compilador percebe que, se a nota for inválida, o método não vai retornar um valor do tipo double, e isso gera o erro.

Existem duas maneiras comuns de resolver isso:

Opção 1: Ajustar o retorno do método

Você pode modificar o método para garantir que um valor double seja sempre retornado. Por exemplo, você pode retornar a nota atual, Nota, se a nova nota for inválida.

public double AtribuirNota(double nota)
{
    if (nota >= 0 && nota <= 10)
    {
        this.Nota = nota; // Atribui a nota aqui
        return this.Nota; // Retorna a nota atribuída
    }
    else
    {
        Console.WriteLine("Nota inválida. Somente permitido notas de 0 a 10!");
        return this.Nota; // Retorna a nota que já existia
    }
}

Nesse caso, a propriedade Nota do objeto é atualizada quando a nota é válida. A sua propriedade Nota deveria ser privada para que a única forma de alterá-la seja através do método AtribuirNota.

Opção 2: Usar um método do tipo void

Se o objetivo do método AtribuirNota é apenas modificar a propriedade Nota e não retornar um valor, o mais comum é declará-lo como void. O tipo void indica que o método não retorna nenhum valor.

public void AtribuirNota(double nota)
{
    if (nota >= 0 && nota <= 10)
    {
        this.Nota = nota;
    }
    else 
    {
        Console.WriteLine("Nota inválida. Somente permitido notas de 0 a 10!");
    }
}

Espero ter ajudado e bons estudos!