/* M E T O D O S A I M P L E M E N T A R */
/**
* Metodo que recebe uma String com a data de nascimento e devolve a idade
*
* A data de nascimento tem OBRIGATORIAMENTE O SEGUINTE
* FORMATO: DD/MM/AAAA
*
* @param dataNascimento
* @return retorna a idade
*/
Gostaria que me dessem aqui uma ajuda que tenho para fazer. Ja tenho o metodo criado:
[code]public static int calcularIdade(String dataNascimento) {
}[/code]
Se me pudessem ajudar. Agradecia
PS: Não é permitido usar o GregorianCalendar nem o Calendar.
Nesse seu exercício da faculdade tem que obrigatoriamente receber a data de nascimento como String :?:
Pode receber mais um parâmetro na sua função calcularIdade :?:
Se sim, você poderia fazer isto:
public static int calcularIdade(String dataNascimento, String dataAtual) {
/*Aqui você vai precisar usar substring para "quebrar" os parâmetros a cada "/"
pesquise sobre isto é fácil. Depois você guarda em variáveis o dia atual, o dia do nascimento, o mês atual, o mês de nascimento, o ano atual e o ano de nascimento.*/
a=aa-an;
dda=a*365;
m=ma-mn;
ddm=m*30;
d=da-dn;
td=dda-ddm-d;
i=td/365;
System.out.println("Sua idade é: " + i);
}
/* M E T O D O S A I M P L E M E N T A R */
/**
* Metodo que recebe uma String com a data de nascimento e devolve a idade
*
* A data de nascimento tem OBRIGATORIAMENTE O SEGUINTE
* FORMATO: DD/MM/AAAA
*
* @param dataNascimento
* @return retorna a idade
*/
Gostaria que me dessem aqui uma ajuda que tenho para fazer. Ja tenho o metodo criado:
[code]public static int calcularIdade(String dataNascimento) {
}[/code]
Se me pudessem ajudar. Agradecia
PS: Não é permitido usar o GregorianCalendar nem o Calendar.[/quote]
Essa parte de dividir é através do String Tokenizer? ficando assim?
StringTokenizer st = new StringTokenizer(data, "/");
if (st.countTokens() != 3) {
return false;
}
String dia, mes, ano;
dia = st.nextToken();
mes = st.nextToken();
ano = st.nextToken();
Essa parte de dividir é através do String Tokenizer? ficando assim?
StringTokenizer st = new StringTokenizer(data, "/");
if (st.countTokens() != 3) {
return false;
}
String dia, mes, ano;
dia = st.nextToken();
mes = st.nextToken();
ano = st.nextToken();[/quote]
Isto funciona :?:
Segue a legenda das minhas variáveis:
da = dia atual
ma = mês atual
aa = ano atual
dn = dia nascimento
mn = mês nascimento
an = ano nascimento
d = dias
m = meses
a = anos
td = total de dias
ddm = dias dos meses
dda = dias dos anos
i = idade
[quote=InicianteJavaHenrique][quote=Peaceandlove]Sim posso fazer isso !
Essa parte de dividir é através do String Tokenizer? ficando assim?
StringTokenizer st = new StringTokenizer(data, "/");
if (st.countTokens() != 3) {
return false;
}
String dia, mes, ano;
dia = st.nextToken();
mes = st.nextToken();
ano = st.nextToken();[/quote]
Isto funciona :?:
Segue a legenda das minhas variáveis:
da = dia atual
ma = mês atual
aa = ano atual
dn = dia nascimento
mn = mês nascimento
an = ano nascimento
d = dias
m = meses
a = anos
td = total de dias
ddm = dias dos meses
dda = dias dos anos
i = idade
flw :thumbup: [/quote]
Sim funciona, eu tenho outro método que faz isso.
Está aqui:
public static boolean isFormatoDataCorrecto(String data) {
if (data == null || data.length() == 0) {
return false;
}
StringTokenizer st = new StringTokenizer(data, "/");
if (st.countTokens() != 3) {
return false;
}
String dia, mes, ano;
dia = st.nextToken();
mes = st.nextToken();
ano = st.nextToken();
for (int i = 0; i < dia.length(); i++) {
if (!Character.isDigit(dia.charAt(i))) {
return false;
}
}
return true;
}
Basta apenas utilizar a parte do Tokenizer neste né?
[code]Scanner teclado = new Scanner(System.in);
Date now = new Date();
System.out.println("Insira uma data: ");
String data = teclado.next();
StringTokenizer st = new StringTokenizer(data, “/”);
if (st.countTokens() != 3) {
System.out.println(“Erro”);
}
String dn, mn, an;
dn = st.nextToken();
mn = st.nextToken();
an = st.nextToken();
int dni = Integer.parseInt(dn);
int mni = Integer.parseInt(mn);
int ani = Integer.parseInt(an);
int da = now.getDay();
int ma = now.getMonth();
int aa = now.getYear();
int a = aa - ani;
int dda = a * 365;
int m = ma - mni;
int ddm = m * 30;
int d = da - dni;
int td = dda - ddm - d;
int i = td / 365;
System.out.println("Sua idade é: " + i);[/code]
public class VerificaIdade {
private final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("yyyy");
private Scanner sc;
public VerificaIdade(){
System.out.println("Ano nascimento: ");
sc = new Scanner(System.in);
verificaIdade(sc.next());
}
public void verificaIdade(String ano){
/** *
* @param ano Ano de Nascimento
*/
try {
Date hoje = new Date();
Date nascimento = DATEFORMAT.parse(ano);
int today = Integer.parseInt(DATEFORMAT.format(hoje));
int born = Integer.parseInt(DATEFORMAT.format(nascimento));
int diferenca = today - born;
if(diferenca < 18){
System.out.println("Menor de idade");
}else if(diferenca >= 18){
System.out.println("Maior de idade");
}
} catch (ParseException ex) {
Logger.getLogger(VerificaIdade.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String[] args){
new VerificaIdade();
}
}
fernandopaiva o seu código não está verificando o dia e o mês de nascimento, seu código entende que eu tenho 30 anos, porém eu tenho 29, afinal nasci em 12/11/1982. De acordo com seu código, se eu tivesse nascido em 21/11/1994 eu seria “Maior de Idade”, porém eu teria 17 anos.
Fiz assim:
[code] public int calcIdade(String nasc){
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date hoje = new Date();
String[] dtHoje = sdf.format(hoje).split("/");
String[] dtNasc = nasc.split("/");
int idade = 0;
idade = Integer.parseInt(dtHoje[2]) - Integer.parseInt(dtNasc[2]);
if(Integer.parseInt(dtNasc[1]) > Integer.parseInt(dtHoje[1]))
idade--;
else if(Integer.parseInt(dtNasc[1]) == Integer.parseInt(dtHoje[1]) && Integer.parseInt(dtNasc[0]) > Integer.parseInt(dtHoje[0]))
idade--;
return idade;
}[/code]Abraço!
fernandopaiva o seu código não está verificando o dia e o mês de nascimento, seu código entende que eu tenho 30 anos, porém eu tenho 29, afinal nasci em 12/11/1982. De acordo com seu código, se eu tivesse nascido em 21/11/1994 eu seria “Maior de Idade”, porém eu teria 17 anos.
Fiz assim:
view plaincopy to clipboardprint?
public int calcIdade(String nasc){
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date hoje = new Date();
String[] dtHoje = sdf.format(hoje).split("/");
String[] dtNasc = nasc.split("/");
int idade = 0;
idade = Integer.parseInt(dtHoje[2]) - Integer.parseInt(dtNasc[2]);
if(Integer.parseInt(dtNasc[1]) >= Integer.parseInt(dtHoje[1]) && Integer.parseInt(dtNasc[0]) > Integer.parseInt(dtHoje[0]))
idade--;
else if(Integer.parseInt(dtNasc[1]) > Integer.parseInt(dtHoje[1]))
idade--;
return idade;
Você fala de, por exemplo, uma pessoa que nasceu em 29/02/2008?
No meu código, essa pessoa fará aniversário no dia 01/03 dos anos que não são bissextos, caso seja ano bissexto, fará em 29/02 mesmo. Não sei se tem uma regra para isso quando tratamos de idade, tem?
Nasceu dia 29/02. No próximo ano, conta mais um ano se estiver em 01/03 até encontrar mais um ano bissexto (que não é necessariamente de 4 em 4 anos!). Se o ano que está sendo pesquisado for bissexto, a pessoa vai fazer aniversário no dia 29/02 e não no dia 01/03 concorda? Precisa tratar isso para ter um resultado mais preciso.