Calcular Idade pelo ano

4 respostas
dedeboy2005

Boa tarde Galera tudo bem?
Sou novato em Java, e estou aprendendo esse mundo de programação que é novo para mim. É o seguinte, eu estou fazendo um exercicio no qual eu preciso mostrar na tela uma mensagem no qual, pelo ano de nascimento dessa pessoa se é adepta ou não a votar. Porém, eu já pesquisei na internet, tentei resolver por conta própria, mas, não achei sobre esse assunto e não estou conseguindo resolvereste procedimento. Vocês poderia me ajudar nesta questão?
Estarei deixando o codigo para analisarem melhor.

import java.time.LocalDate;

import java.time.Period;

import java.util.Scanner;

import static java.lang.System.in;
public class AutorizaVotar {

public static void main(String[] args) {

Scanner entrance = new Scanner(in);
System.out.print("Input you BirthYear:");
    int birthYear = entrance.nextInt();

    LocalDate today = LocalDate.now();
    LocalDate birthDate = LocalDate.of(birthYear);
    int years = Period.between(today, birthDate).getYears();


    System.out.println(years);

    /*if (years >= 18){
        System.out.println("You are adept to vote in your president!!!");
    }
    else{
        System.out.println("You are not adept to vote in your president!!!");
    }
*/

}

}

Obrigado.

4 Respostas

Mike

A passagem de parametro para o método of de LocalDate esta errado:

of(int year, int month, int dayOfMonth)
of(int year, Month month, int dayOfMonth)
Jonathan_Medeiros

Uma possível solução usando Calendar:

private int calculaIdade(Date data) {
    Calendar dataNascimento = Calendar.getInstance();
    dataNascimento.setTime(data); //Data de nascimento
    Calendar dataAtual = Calendar.getInstance();
    dataAtual.setTime(new Date()); //Data atual
        
    return dataAtual.getWeekYear() - dataNascimento.getWeekYear(); //Retorna a idade
}
staroski

O método of da classe LocalDate espera receber o ano, mês e dia.
Você só passou o ano.

E no método between da classe Period, você deve pôr a data de nascimento antes da data atual, caso contrário você terá uma idade negativa.

import java.io.PrintStream;
import java.time.LocalDate;
import java.time.Period;
import java.util.Scanner;

public class AutorizaVotar {

    private static final Scanner in = new Scanner(System.in);
    private static PrintStream out = System.out;

    public static void main(String[] args) {

        out.print("Input you BirthYear:");
        int birthYear = in.nextInt();

        LocalDate today = LocalDate.now();
        LocalDate birthDate = LocalDate.of(birthYear, 1, 1);
        int years = Period.between(birthDate, today).getYears();

        out.println(years);

        if (years >= 18) {
            out.println("You are adept to vote in your president!!!");
        } else {
            out.println("You are not adept to vote in your president!!!");
        }
    }
}
dedeboy2005

Obrigado Galera pela ajuda, agora entendi como funciona.
Valeu mesmo!!!

Criado 8 de agosto de 2019
Ultima resposta 8 de ago. de 2019
Respostas 4
Participantes 4