Em um dos exercícios, é pedido que seja criado um método que valide a data, para evitar datas inexistentes como 31/02/2017. Eu tentei fazer um método, e depois corrigi para o do professor, mas continua deixando entrar datas inválidas.
class Funcionario {
private String nome;
private String departamento;
private String rg;
private double salario;
private Data dataDeEntrada;
// Início getters e setters de atributos
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDepartamento() {
return this.departamento;
}
public void setDepartamento(String departamento) {
this.departamento = departamento;
}
public String getRg() {
return this.rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public double getSalario() {
return this.salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
public Data getDataDeEntrada() {
return this.dataDeEntrada;
}
public void setDataDeEntrada(int dia, int mes, int ano) {
this.dataDeEntrada = new Data(dia, mes, ano);
this.dataDeEntrada.getFormatada();
}
// Fim getters e setters de atributos
//Construtor
public Funcionario(String nome) {
this.nome = nome;
}
public Funcionario() {
}
public void recebeAumento(double aumento) {
this.salario += aumento;
}
public double getGanhoAnual() {
return this.salario * 12;
}
public void mostra() {
System.out.println("Nome: " + this.nome);
System.out.println("Departamento: " + this.departamento);
System.out.println("Data de admissao: " + this.dataDeEntrada.getFormatada());
System.out.println("RG: " + this.rg);
System.out.println("Salário: " + this.salario);
System.out.println();
System.out.println("Ganho anual: " + this.getGanhoAnual());
}
}
class Data {
private int dia;
private int mes;
private int ano;
public Data(int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
if (! isDataViavel(dia, mes, ano)) {
System.out.println("A data " + getFormatada() + " não existe!");
}
}
private boolean isDataViavel(int dia, int mes, int ano) {
if (dia <= 0 || mes <= 0) {
return false;
}
int ultimoDiaDoMes = 31; // por padrao são 31 dias
if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
ultimoDiaDoMes = 30;
} else if (mes == 2) {
ultimoDiaDoMes = 28;
if((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))){
ultimoDiaDoMes = 29;
}
}
if (dia > ultimoDiaDoMes) {
return false;
}
return true;
}
public void setData(int dia, int mes, int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public String getFormatada() {
return this.dia + "/" + this.mes + "/" + this.ano;
}
}
class TestaFuncionario {
public static void main(String[] args) {
Funcionario f = new Funcionario();
f.setNome("Jean");
f.setDepartamento("T.I.");
f.setRg("MG-12.345.678");
f.setSalario(800.0);
f.setDataDeEntrada(31, 2, 2013); //Essa data não deveria ser aceita, porém ao compilar e rodar, o método abaixo mostra essa data.
f.mostra();
}
}
Como corrigir?