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

Testando condicional if no Get e Set

Estava testando as condicionais no get e set dos métodos, mais específicamente testando um if para o setAgencia da seguinte maneira:

    public void setAgencia(int agencia) {
        if(this.agencia >= 0 && this.agencia <= 500) {
            this.agencia = agencia;
        } else {
            System.out.println("Número de agência inválido");
        }
    }

Porém, na hora de definir minha agência, os valores acimade 500 estão sendo definidos e não está retornando minha condicional do else.

        conta.setAgencia(5000);
        System.out.println(conta.getAgencia());

Retorna 5000

3 respostas

Oie Thomas, tudo bem contigo?

Isso aconteceu devido ao uso do this na condicional dentro do if. Sempre que usamos o this estamos nos referindo a classe, então quando você fez dessa forma if(this.agencia >= 0 && this.agencia <= 500) a agência que está sendo usada nos dois casos não é a que entrou como argumento do método setAgencia e sim o atributo da classe Conta, que por padrão se não tiver sido "populado" ele terá o valor 0.

Faça o seguinte teste:

Na classe de teste, sem alterar o código da classe "Conta", coloque o seguinte código:

        conta.setAgencia(5555);
        System.out.println(conta.getAgencia());

        conta.setAgencia(100);
        System.out.println(conta.getAgencia());

Perceba que o primeiro conta.setAgencia(5555) funcionou, agora o segundo não. E isso aconteceu, pois como eu disse acima, quem está sendo usado para fazer a condição é o atributo da classe "Conta". Por isso, quando o atributo passou a valer 5555 após o primeiro método, quando o segundo método tenta trocar o valor para 100, ele não consegue, já que a condição cai no bloco "else" por conta do atributo ter o valor acima de 500.

Para arrumarmos isso, é simples, na classe "Conta" faça a seguinte alteração:

    public void setAgencia(int agencia){
        if(agencia >= 0 && agencia <= 500) {   // sem o this na condional
            this.agencia = agencia;
        } else {
            System.out.println("Número de agência inválido");
        }
    }

Espero ter ajudado!

Se tiver qualquer outra dúvida estarei por aqui :)

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

Resolveu meu problema, porém, fiquei com dúvida porque ele me retorna o valor zerado (que é o valor padrão da variável sem estar populada) além da mensagem "Número de agência inválido"?

solução!

Você está falando desse teste aqui que mandei fazer?

        conta.setAgencia(5555);
        System.out.println(conta.getAgencia());

        conta.setAgencia(100);     // aqui ele printa a mensagem "Número de agência inválido"
        System.out.println(conta.getAgencia());   // aqui ele printa o valor do atributo agencia do objeto conta

Se for, coloquei uma explicação acima no código.