Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

The_BoB

[Resolvido] Algoritmo que informa se uma data é válida ou não

Recommended Posts

O algoritmo é o seguinte

 

import java.util.Scanner;
public class DataValida {

    public static void main (String[]args) {
    	Scanner teclado = new Scanner (System.in);
    	System.out.println ("Por favor digite o dia");
    	int dia = teclado.nextInt();
    	System.out.println ("Por favor digite o mês");
    	int mes = teclado.nextInt();
    	System.out.println ("Por favor digite o ano");
    	int ano = teclado.nextInt();
    	if (mes == 4 && mes == 6 && mes == 9 && mes == 11 && dia > 0 && dia <= 30 && ano > 0)
    	{
    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    } else {
    	    	if (mes == 2 && dia > 0 && dia <= 28 && ano > 0) {
    	    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    	} if (mes == 1 && mes == 3 && mes == 5 && mes == 7 && mes == 8 && mes == 10 && mes == 12 && dia > 0 && dia <= 31 && ano > 0)
    	    	{
    	    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    } else {
				System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
				   }
    	    	   }
    	    }
    }

Já vi re-vi e vi de novo e não consigo achar o erro, sou novo e a questão que tô tendo muita dificuldade pra resolver, queria que me explicassem onde está o erro. O erro é o seguinte quando vou testar o algoritmo e insiro uma data válida ele diz que a data não é válida ou as vezes diz a data é válida e logo abaixo "Não é uma data válida". Tô enganchado aí quem puder ajudar desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajuda mais se você fornecer o dado de teste.

Mas com certeza a lógica dos meses está errada.

 

4/6/2000 => deveria entrar no primeiro if, mas em nenhum lugar da face da Terra Abril é igual ao mês de Junho. Você não pode ter 4 = 6. Ou é 4 ou é 6.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Isis, mudei essa parte e adicionei um if para ano bissexto, mas ainda achei um erro. Só não sei como corrigí-lo

 

import java.util.Scanner;
public class Questao16 {

    public static void main (String[]args) {
    	Scanner teclado = new Scanner (System.in);
    	System.out.println ("Por favor digite o dia");
    	int dia = teclado.nextInt();
    	System.out.println ("Por favor digite o mês");
    	int mes = teclado.nextInt();
    	System.out.println ("Por favor digite o ano");
    	int ano = teclado.nextInt();
    	if (dia > 0 && dia <= 30 && mes == 4 || mes == 6 || mes == 9 || mes == 11 && ano > 0)
    	{
    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    } else {
    	    	if (dia > 0 && dia <= 28 && mes == 2 && ano > 0) {
    	    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    	} if (dia > 0 && dia <= 31 && mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12 && ano > 0)
    	    	{
    	    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    } if (dia > 0 && dia <= 29 && mes == 2 && ano > 0 && ano % 400 == 0 || ano % 4 == 0 && ano % 100 != 0) {
    	    		System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
    	    }
    	    	if (dia > 31 || dia <= 0 && mes > 12 || mes <= 0 && ano < 0 ) {
				System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
				   } if (dia > 29 && mes == 2 && ano % 400 != 0 || ano % 4 != 0 && ano % 100 == 0) {
				   	System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
				   }
				   }
				   }
    	    	   }

Execução:

Por favor digite o dia

4

Por favor digite o mês

6

Por favor digite o ano

2000

4/6/2000 É uma data válida.

 

Process completed.

 

 

 

O erro que falei lá em cima:

 

Por favor digite o dia

32

Por favor digite o mês

4

Por favor digite o ano

120

32/4/120 É uma data válida.

32/4/120 Não é uma data válida.

 

Process completed.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele cai aki:

if (dia > 0 && dia <= 29 && mes == 2 && ano > 0 && ano % 400 == 0 || ano % 4 == 0 && ano % 100 != 0) {
                        System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");

120 % 4 = 0 E 120 % 100 = 0;

 

tente rever isso;

 

---

faça uma coisa simples primeiro:

import java.util.Scanner;
public class Questao16 {

    public static void main (String[]args) {
	int invalida = 0;
        Scanner teclado = new Scanner (System.in);
        System.out.println ("Por favor digite o dia");
        int dia = teclado.nextInt();
        System.out.println ("Por favor digite o mes");
        int mes = teclado.nextInt();
        System.out.println ("Por favor digite o ano");
        int ano = teclado.nextInt();
	String Data = new String(dia+"/"+mes+"/"+ano);
	if (dia < 1 || dia > 31) invalida = 1;
	else if (mes < 1 || mes > 12) invalida = 1;
	else if (ano < 1) invalida = 1;
	if (invalida == 0) System.out.println(Data+" E uma data valida");
	else               System.out.println(Data+" Nao e uma data valida");
    }
}
ai depois acrescente algo pra ver se é bissexto!

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

não tô entendendo ainda, mas vou tentar fazer um novo. Obrigado a todos!

 

import java.util.Scanner;
public class Questao16 {

        public static void main (String[]args) {
        Scanner teclado = new Scanner (System.in);
        System.out.println ("Por favor digite o dia");
        int dia = teclado.nextInt();
        System.out.println ("Por favor digite o mês");
        int mes = teclado.nextInt();
        System.out.println ("Por favor digite o ano");
        int ano = teclado.nextInt();
        if (dia <= 0 || dia > 31 || mes <= 0 || mes > 12 || ano <= 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
        } else {
          if (dia > 0 && dia <= 31 && mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12 && ano > 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
        } else {
        } if (dia > 0 && dia <= 30 && mes == 4 || mes == 6 || mes == 9 || mes == 11 && ano > 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
        } else {
         if (dia > 0 && dia <= 28 && mes == 2 && ano > 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
        } else {
         if (dia > 0 && dia <= 29 && mes == 2 && ano > 0 && ano % 400 == 0 || ano % 4 == 0 && ano % 100 != 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " É uma data válida.");
        } else {
         if (dia >= 29 && mes == 2 && ano % 400 != 0 || ano % 4 != 0 && ano % 100 == 0) {
        	System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
        } else {
         if (dia >= 31 && mes == 4 || mes == 6 || mes == 9 || mes == 11) {
        	System.out.println (dia + "/" + mes + "/" + ano + " Não é uma data válida.");
         	}
           }
          }
         }
        }
       }
      }
     }

Muito obrigado! Tá aí feito. Agora queria saber se alguém me indica algum e-book e/ou site no qual eu possa aprender sobre o uso do laço for. Tem uma questão aqui que é pra desenvolver um algoritmo que calcule e imprima a soma dos n primeiros pares, e o valor de n tem que ser informado pelo usuário. Não faço a mínima ideia de como fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Procure o livro Absolute Java do Walter Savitch. O Core Java 1 também serve ( deve estar na 8a edição)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.