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

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:

[code]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);[/code]

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.

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

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.

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 )){ 

[quote=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:

[code]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);[/code]

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.[/quote]

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;); } } } }