Solucionado (ver solução)
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.