Solucionado (ver solução)

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!

Solucionado
(ver solução)
10
respostas

Operador && e ||

Amigos,

É possivel usar o && e || juntos no mesmo código ? E o || mais de uma vez.

Exemplo:

if(dia > 30 && mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
10 respostas

Sim, é perfeitamente possível, e o código está correto. Você pode combinar essas operações lógicas de acordo com sua necessidade.

Olá Vítor! É possível combinar os operadores lógicos sim, todos eles, tanto os mencionados por você, E ( && ) e OU ( || ) , como também o de negação (!). Só cuidado para não se perder com tantos operadores juntos!!

Abraços e sucesso nos estudos!

Roberta,

Obrigado. Realmente não correu erro na compilação, mas o meu código não esta retornando o valor certo, veja por favor:

        public void preencherData(int dia, int mes, int ano){
            if(dia > 29 && mes == 2){
                this.dia = 29;
                this.mes = 2;
                this.ano = ano;
            }else if(dia > 31 && mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12){
                this.dia = 31;
                this.mes = mes;
                this.ano = ano;
            }else{
            this.dia = dia;
            this.mes = mes;
            this.ano = ano;
        }
        }

Quando eu defino a data dataDeEntrada.preencherData(10, 3, 2016);

Retorna:

31/3/2016

O que pode estar errado ?

Teria que retornar

10/3/2016

Olá Vítor! Neste trecho de código que postou não é possível verificar o porque deste retorno. Este trecho está com a lógica correta. Poderia postar o restante do código?

Bom, vou analisar esse código. Só cuidado com o operador >. Você colocou > para 29 e mês 2, o mês 2 não tem dia maior que 29, apenas 29. E também no dia 31, não existe dia maior, eu sugeriria o operador ==.

E sim, o código teria que dar o retorno correto para essa data específica, não sei o que pode estar errado.

class Data{
    int dia;
    int mes;
    int ano;

        public void preencherData(int dia, int mes, int ano){
            if(dia > 29 && mes == 2){
                this.dia = 29;
                this.mes = 2;
                this.ano = ano;
            }else if(dia > 31 && mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12){
                this.dia = 31;
                this.mes = mes;
                this.ano = ano;
            }else{
            this.dia = dia;
            this.mes = mes;
            this.ano = ano;
        }
        }

        String getFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;

        }
}

class TestaEmpresa{
    public static void main(String[] args){

        Data dataDeEntrada = new Data();

        dataDeEntrada.preencherData(10, 3, 2016);
        System.out.println(dataDeEntrada.getFormatada());



    }
}
solução!

Vítor, este trecho está com problemas sim. Altere para:

else if(dia > 31 && (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12))

A condição dos meses deve estar entre parênteses.

Testa aí e dá uma alô!

Boa André. Funcionou agora, retornou 10/3/2016 !!!

Obrigado tb Roberta !!!

Ah, exato, os parênteses, não tinha reparado que faltava. Esses leitores de tela enganam às vezes. Eles são necessários pois as condições são diferentes e é necessário atendê-las.