O que tem de errado com meu algoritmo?

1 resposta
M

Ola pessoal eu preciso fazer um algoritmo assim :
Dados o dia, mês e ano do nascimento de uma pessoa, além do dia, mês e ano da data atual, diga quantos anos completos uma pessoa têm. Caso a data de nascimento seja posterior ao dia de hoje, imprimia uma mensagem de erro.

eu ja fiz ele,ta sem nenhum erro ele roda normal só que ele ta imprimindo assim:

dia nascimento
2
mês nascimento?
3
ano nascimento
1991
dia atual
3
mês atual
4
ano atual
2009
erro
erro
18

i esse é o codigo:

[quote][quote]public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner teclado = new Scanner(System.in);

System.out.println(dia  nascimento);

int diaNascimento = teclado.nextInt();

System.out.println(mês nascimento?);

int mesNascimento = teclado.nextInt();

System.out.println(ano nascimento);

int anoNascimento = teclado.nextInt();

System.out.println(dia  atual);

int diaAtual = teclado.nextInt();

System.out.println(mês atual);

int mesAtual = teclado.nextInt();

System.out.println(ano atual);

int anoAtual = teclado.nextInt();

if (diaNascimento > diaAtual);{

System.out.println(erro);

}

if (mesNascimento > mesAtual);{

System.out.println(erro);

}

int idade;

idade = anoAtual - anoNascimento;

System.out.println(idade);
}

}

O que eu tenho que mudar para ele da certo???

1 Resposta

Pedrosa

Para se comparar duas datas deve juntar o ano + mes + dia

String entrada = anoNascimento + "" + mesNascimento + "" + diaNascimento;

Para pagar a data atual pode ser feito dessa forma:

Integer.parseInt(new SimpleDateFormat("yyyyyMMdd").format(Calendar.getInstance().getTime()));

O codigo final ficaria assim:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;


public class Idade {
	
	public static void main(String[] args) {
		
		Scanner teclado = new Scanner(System.in);
		
		System.out.println("dia nascimento");
		int diaNascimento = teclado.nextInt();
		
		System.out.println("mês nascimento?");
		int mesNascimento = teclado.nextInt();
		
		System.out.println("ano nascimento");
		int anoNascimento = teclado.nextInt();
		
		String entrada = anoNascimento + "" + mesNascimento + "" + diaNascimento;
		
		if(nascimentoPosterior(Integer.parseInt(entrada))){
			System.out.println("Data de nascimento inválida");
		}else{
			System.out.println("Sua idade é " + calculaIdade(anoNascimento));
			
		}

	}
	//vejo se sua data é maior que a de hoje ex: 19801122 > 20090324,  junto ano mes e dia e tenho um numero
       // new SimpleDateFormat("yyyyyMMdd").format(Calendar.getInstance().getTime()) retorna a data de hoje no formato que precisa para calcular
	public static boolean nascimentoPosterior(int entrada ){
		return entrada > Integer.parseInt(new SimpleDateFormat("yyyyyMMdd").format(Calendar.getInstance().getTime()));
	}
	// aqui calculo a idade assim: ano atual - ano de nascimento
	public static int calculaIdade(int anoNascimento){
		return Calendar.getInstance().get(Calendar.YEAR) - anoNascimento;
	}
}

Conseguiu entender?

É só um exemplo, mas pode ser melhorado com o uso correto do Calendar

Criado 25 de março de 2009
Ultima resposta 25 de mar. de 2009
Respostas 1
Participantes 2