Calculo de Idade e retornar idade

27 respostas
java
T

Estou com problema ainda não solucionado e também não obtive resposta:
Eu tenho uma Classe chamada Idade.java e com seus atributos e métodos eu calcule a Idade passando parâmetros para JSP em um input.
package br.com.pesquisamercado.modelo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Scanner;

public class Idade {

	private int idade;
	private Date dataAtual;
	private Object dataNascimento;

	public int getIdade()  {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public int calcularIdade(Date dataNascimento) throws ParseException {
		LocalDate nascimento = LocalDate.of(((LocalDate) this.dataNascimento).getYear(), idade, idade);
	    final LocalDate dataAtual = LocalDate.now();
	    Period periodo = Period.between(nascimento, dataAtual);
	    return idade;
	}
}
// Não tenho certeza se o método está certo 
============

Tenho o JSP que faz o input pela data de nascimento

<tr>
			<%
			Date nascimento= new Date(request.getParameter("dataNascimento"));
			Idade idade = new Idade().calcularIdade(nascimento);
			%>
				<td>Idade:</td>
				<td><input type="text" name="idade" value="" disable maxlength="3" size="1" value=<%=idade.getIdade()%>/></td>
			</tr>

Preciso saber como faço para que retorne a idade e preciso muito de ajuda.

27 Respostas

D

Faz assim

T

Não compreendi, como você faria nessa questão?

D

O objetivo não é retornar a idade? Isso está sendo feito no método que você colocou aí.
Agora, se a ideia é exibir a idade na página, então você precisa mostrar como está a servlet (creio que esteja usando servlet + jsp, certo?)

T

Sim, como fiz a jsp, está com a seguinte mensagem de erro:
//Fragmento da página jsp

Data de Nascimento: <% Date nascimento= new Date(request.getParameter("dataNascimento")); Idade idade = new Idade().calcularIdade(nascimento); // type mismatch: cannont convert from int to Idade %> Idade: />
T

Em uma parte da Servlet:
int idade = Integer.parseInt(request.getParameter(“idade”));

D

É que você, por alguma razão, decidiu criar uma classe chamada Idade.
Este objeto idade (com i minúsculo) é uma instância da classe Idade (Com I maiúsculo).
Você precisa decidir se vai usar int ou vai usar Idade.

T

Com Idade (maíusculo) será utilizado também em outra página para reutilizar o código e quero usar o Idade mesmo e não o int.

D

Então você precisa adequar teu código para que, ao invés de inteiro, ele devolva uma instância de Idade.

T

Nesse caso ele precisa retornar aquele valor calculado. Não seria isso?

D

Está se referindo a qual valor calculado? Se é o que está nesse método

public int calcularIdade(Date dataNascimento) throws ParseException {

Não, pois esse método devolve um int.
É esse método que você deve alterar.

P.S.: O reaproveitamento de um atributo/variável não depende da declaração de uma classe prórpria para isso.

T

Sim, nesse, pois ele não deve obrigatoriamente devolver?
Você teria algum exemplo melhor com o jsp e o método que pudesse fazer corretamente?

D

Cara, você está complicando as coisas de forma desnecessária.
Ao invés disso

Use isso

int idader = new Idade().calcularIdade(nascimento);

Ou, se insiste nessa ideia (não muito interessante)

Idade idade = new Idade();
int outraVariavelQueDeveriaSeChamarIdadeMasNaoPodePorQueJaTemosUmaComEsseNome = idade.calcularIdade(nascimento);

Entendeu?

T

Sim.

T

Fiz um teste, porém apresentou um erro:

T

Talvez eu sabia do que seja.
O LocalDate no método não aceita o Date na JSP criada, como uma incompatibilidade.

T

Estou descrevendo o método a seguir:

package br.com.pesquisamercado.modelo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Scanner;

public class Idade {

	private int idade;
	private Date dataAtual;

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public int calcularIdade(Date dataNascimento) {
	    LocalDate dataHoje=LocalDate.now();
	    DateTimeFormatter formatador=DateTimeFormatter.ofPattern("dd/MM/yyyy");
	    idade=formatador - dataNascimento;
	    return idade;
	}
}

Estou acho que no caminho de conseguir.

D

Cara, você está estudando com base em que? Vídeo aula? Curso? Apostila?

T

Cheguei a fazer curso de Java presencial e também Java Web.
Porém estou desenvolvendo um sistema Web que faça também esse processo.

D

Então você deveira lembrar que, quando você vai instanciar um objeto que não está no pacote padrão (java.lang) ou não é acessível diretamente pela servlet, você precisa fazer o import dessa classe

T

Entendi

T

Talvez eu tenha que estudar mais…Darlan…também tenha esse quesito também
:slight_smile:

D

Essa área vai exigir que você sempre esteja estudando.
Todo dia aparecem 1000 novas tecnologias para serem usadas. Alguma delas vai ser o foco em algum momento.

T

Compreendi.

T

Eu consegui ajustar o método sendo que agora a model está OK.
package br.com.pesquisamercado.modelo;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.time.LocalDate;

import java.time.LocalDateTime;

import java.time.Month;

import java.time.Period;

import java.time.format.DateTimeFormatter;

import java.time.format.FormatStyle;

import java.time.temporal.TemporalAccessor;

import java.time.temporal.TemporalQuery;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.Locale;

import java.util.Scanner;

public class Idade {

private int idade;

public int getIdade() {
	return idade;
}

public void setIdade(int idade) {
	this.idade = idade;
}

public int calcularIdade(Date dataNascimento) {
	GregorianCalendar dataHoje = new GregorianCalendar();
	int diaAtual = 0, mesAtual = 0, anoAtual = 0; 
	diaAtual = dataHoje.get(Calendar.DAY_OF_MONTH);
	mesAtual = dataHoje.get(Calendar.MONTH) + 1;
	anoAtual = dataHoje.get(Calendar.YEAR);
	SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
	String dtNasc = formatador.format(dataNascimento);
	String diaNasc = dtNasc.substring(0, 2);
	String mesNasc = dtNasc.substring(3, 5);
	String anoNasc = dtNasc.substring(6, 10);
	int diaNascimento = Integer.parseInt(diaNasc);
	int mesNascimento = Integer.parseInt(mesNasc);
	int anoNascimento = Integer.parseInt(anoNasc);
	idade = anoAtual - anoNascimento;
	if(mesAtual != mesNascimento) {
		if(mesAtual < mesNascimento) {
			idade--; 
			return idade; 
		}
	}
	else {
		return idade;
	}
	return idade;
}

}
No formulário que tem um campo chamado idade como você me mostrou precisa retornar nesse campo desabilitado a idade da pessoa.

Data de Nascimento: Idade: <% Date nascimento= new Date(request.getParameter("dataNascimento")); int idader = new Idade().calcularIdade(nascimento); %> Está apresentando erro, agora não sei se vou ter que colocar value=<%outprin(idader);%> Eu entendi, pois num arquivo teste com um método main funcionou.
D

Qual o erro que aparece?

T

Quando inicio aparece essa mensagem de erro:
5:

Idade:
96: <%
97: Date nascimento= new Date(request.getParameter(“dataNascimento”));
98: int idader = new Idade().calcularIdade(nascimento);
99: %>
100: <input type=“text” name=“idade” maxlength=“3” size=“1” value=<%=idader%> />
Stacktrace:] with root cause

java.lang.IllegalArgumentException

at java.util.Date.parse(Date.java:617)

at java.util.Date.(Date.java:274)

at org.apache.jsp.cadastraconvidado_jsp._jspService(cadastraconvidado_jsp.java:162)
T

Acho que consegui resolver, porém com Javascript.
Porém é uma solução bem melhor

Criado 18 de fevereiro de 2019
Ultima resposta 27 de mar. de 2019
Respostas 27
Participantes 2