[RESOLVIDO]Ajuda em resolução de exercicio com if

4 respostas
G
Olá pessoal, estou resolvendo uns exercícios de POO e não consigo arrumar um problema que está dando no meu codigo. Eu preciso fazer um exercicio que receba duas datas e veja se elas são válidas. Então eu criei um método que faz o teste:
public String testaDatas(){
        if(dia > 0 && dia < 31 || mes > 0 && mes < 12 || ano > 0 && ano < 12 ){
           return "Data valida";
        }else{
            return "!!Data invalida!!";
        } 
    }
E coloquei pra receberem esse valor:
public class ProgramaDatas {
    public static void main(String [] args){
        
        Scanner in = new Scanner(System.in);
        Datas data1 = new Datas(13, 11, 12);
        Datas data2 = new Datas(1, 2, 30);

Só que mesmo com o ano no valor 30 ele diz que é uma data válida. Não consigo achar o meu erro, quando eu coloco por exemplo 50/30/30 ele diz que é inválido só que se por somente um valor errado, ele diz que é válido.

4 Respostas

W

Seu teste não está certo porque você diz assim:

se Dia é correto OU Mes é correto OU Ano é correto, a Data é correta. Ou seja, se dia estiver correto, mês e ano não precisam estar corretos para você considerar Data válida.

Também você limitou o ano entre 1 e 11. Não está certo.

wiliamps

Marcelo_de_Andrade

Operadores lógicos:

|| mesmo que OR
&& mesmo que AND

Você está dizendo na sua condição:

if(dia > 0 && dia < 31 || mes > 0 && mes < 12 || ano > 0 && ano < 12 ){

Se dia for maior que 0 e menor que 31 OU mes maior que zero e menor que doze OU ano maior que zero e menor que doze

Caso uma das datas esteja errada, ele vai passar como válido. Veja da seguinte maneira:

if( (dia > 0 && dia < 31) && ( mes > 0 && mes < 12 ) && ( ano > 0 && ano < 12 ) ){

Só será considerado válido caso todas as três entradas fornecidas estejam conforme a condição informada.

marcos3

Acho que você deve colocar um igual, senão seu mês ficará limitado a 30 dias e seu ano a 11 meses.

if((dia > 0 && dia <= 31) && (mes > 0 && mes <= 12) && (ano > 0 && ano < 12 )){
prfs91
GabbiRold:
Olá pessoal, estou resolvendo uns exercícios de POO e não consigo arrumar um problema que está dando no meu codigo. Eu preciso fazer um exercicio que receba duas datas e veja se elas são válidas. Então eu criei um método que faz o teste:
public String testaDatas(){
        if(dia &gt; 0 && dia &lt; 31 || mes &gt; 0 && mes &lt; 12 || ano &gt; 0 && ano &lt; 12 ){
           return &quot;Data valida&quot;;
        }else{
            return &quot;!!Data invalida!!&quot;;
        } 
    }
E coloquei pra receberem esse valor:
public class ProgramaDatas {
    public static void main(String [] args){
        
        Scanner in = new Scanner(System.in);
        Datas data1 = new Datas(13, 11, 12);
        Datas data2 = new Datas(1, 2, 30);

Só que mesmo com o ano no valor 30 ele diz que é uma data válida. Não consigo achar o meu erro, quando eu coloco por exemplo 50/30/30 ele diz que é inválido só que se por somente um valor errado, ele diz que é válido.

Tipo um dia fiz um exercício assim, não sei se é o seu caso:

import java.util.Scanner;
public class L02_Q15_DataValida
{
    public static void main (String[]args)
    {
        Scanner dados = new Scanner (System.in);
        int dia, mes, ano;
        System.out.print(&quot;Dia: &quot;);
        dia = dados.nextInt();
        System.out.print(&quot;Mês: &quot;);
        mes = dados.nextInt();
        System.out.print(&quot;Ano: &quot;);
        ano = dados.nextInt();
        if ((ano&gt;=0000||ano&gt;=00)&&(ano&lt;=9999||ano&lt;=99))
        {
            if (mes&gt;=1&&mes&lt;=12)
            {
                if (mes==2)
                {
                    if ((ano%400==0)||(ano%4==0&&ano%100!=0))
                    {
                        if (dia&gt;=1&&dia&lt;=29)
                        {
                            System.out.println(&quot;É uma data válida! (&quot;+ dia +&quot;/&quot;+ mes +&quot;/&quot;+ ano +&quot;)&quot;);
                        }
                        else
                        {
                            System.out.println(&quot;Não é uma data válida!&quot;);
                        }
                    }
                    else
                    {
                        if ((ano%400!=0)||(ano%4!=0&&ano%100==0))
                        {
                            if (dia&gt;=1&&dia&lt;=28)
                            {
                                System.out.println(&quot;É uma data válida! (&quot;+ dia +&quot;/&quot;+ mes +&quot;/&quot;+ ano +&quot;)&quot;);
                            }
                            else
                            {
                                System.out.println(&quot;Não é uma data válida!&quot;);
                            }
                        }
                    }
                }
                else
                {
                    if (mes%2==0)
                    {
                        if (dia&gt;=1&&dia&lt;=30)
                        {
                            System.out.println(&quot;É uma data válida! (&quot;+ dia +&quot;/&quot;+ mes +&quot;/&quot;+ ano +&quot;)&quot;);
                        }
                        else
                        {
                            System.out.println(&quot;Não é uma data válida!&quot;);
                        }
                    }
                    else
                    {
                        if (mes%2!=0)
                        {
                            if (dia&gt;=1&&dia&lt;=31)
                            {
                                System.out.println(&quot;É uma data válida! (&quot;+ dia +&quot;/&quot;+ mes +&quot;/&quot;+ ano +&quot;)&quot;);
                            }
                            else
                            {
                                System.out.println(&quot;Não é uma data válida!&quot;);
                            }
                        }
                    }
                }
            }
            else
            {
                if (mes&lt;1||mes&gt;12)
                {
                    System.out.println(&quot;Não é uma data válida!&quot;);
                }
            }
        }
        else
        {
            if ((ano&lt;0000||ano&lt;00)||(ano&gt;9999||ano&gt;99))
            {
                System.out.println(&quot;Não é uma data válida!&quot;);
            }
        }
    }
}
Criado 13 de novembro de 2012
Ultima resposta 14 de nov. de 2012
Respostas 4
Participantes 5