Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Minha resposta - Controle do nível de bateria

package encapsulamento.nivelbateria;

public class Bateria {

    private int nivel;

    public int getNivel() {
        return nivel;
    }

    public int setNivel(int nivel) {
        if (nivel >= 0 && nivel <= 100) {
            this.nivel = nivel;
        }
        if (nivel <= 20){
            System.out.println("Status: Bateria Fraca");
        } else if (nivel >= 21 && nivel <= 79) {
            System.out.println("Status: Bateria OK");
        } else if (nivel >= 79){
            System.out.println("Status: Bateria cheia");
        }
        return nivel;
    }
}
package encapsulamento.nivelbateria;

public class Principal {
    public static void main(String[] args) {
        Bateria bateria = new Bateria();

        bateria.setNivel(10);
    }
}
1 resposta

Oi, Antonio. Tudo bem com você?

Seu exercício já está utilizando o encapsulamento de forma adequada ao manter o atributo nivel como private e permitir sua alteração por meio do método setNivel(). A validação para aceitar somente valores entre 0 e 100 também está presente. Tem apenas um detalhe na condição responsável por identificar a bateria cheia: a atividade define que o status deve ser “Bateria cheia” a partir de 80%, mas no código foi utilizado nivel >= 79. Dessa forma, quando o nível for exatamente 79, ele poderá cair nessa condição. Como o intervalo de 21% a 79% já está contemplado no else if anterior, nesse caso específico o resultado continua sendo “Bateria OK”, mas deixar a regra como nivel >= 80 representa melhor o que foi solicitado.

Outro ponto interessante é o retorno do setNivel(). Como o objetivo principal desse método é definir o nível, ele poderia ser void, já que o valor não está sendo utilizado na Principal. Além disso, quando o valor informado estiver fora do intervalo de 0 a 100, atualmente o nível não é alterado, mas ainda assim o método continua avaliando o status usando o valor inválido. Por exemplo, se você chamar setNivel(150), nenhuma atribuição acontece, mas as condições ainda serão avaliadas.

Você poderia testar valores como 10, 20, 21, 79, 80, 100 e também 101 para observar como cada limite se comporta. O que você acha que deveria acontecer com o status quando alguém tentar definir um nível como -10 ou 150?

Parabéns pelo exercício, Antonio. A estrutura da classe está bem alinhada com a proposta de encapsulamento e você já aplicou uma validação importante no acesso ao atributo. Continue testando os valores de limite, porque eles ajudam bastante a conferir se as condições estão cobrindo exatamente as regras da atividade. O fórum está à disposição.

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