a
Para algúem te ajudar tens de colocar a tua dúvida. Copy/paste de um enunciado não é uma dúvida. Ninguém vai (pelo menos não deveria) fazer o trabalho por ti. Mas muita gente te poderá ajudar nas tuas dúvidas.
public class Ava2 {
public static void main(String[] args) {
}
}
class diamesano{
private int dia, mes, ano;
public diamesano(int dia, int mes , int ano) {
this.dia = dia;
this.mes = mes;
this.ano = ano;
atualiza_dia();
atualiza_mes();
atualiza_ano();
}
public int getDia() {
return dia;
}
public int getMes() {
return mes;
}
public int getAno() {
return ano;
}
public void setDia(int dia) {
this.dia = dia;
}
public void setMes(int mes) {
this.mes = mes;
atualiza_mes();
}
public void setAno(int ano) {
this.ano = ano;
atualiza_ano();
}
public void atualiza_dia(){
dia = 01;
atualiza_dia();
}
public void atualiza_mes(){
boolean meses;
meses = mes >= 01 && mes <=12;
}
public void atualiza_ano(){
// se o ano for maior que 400
if(ano % 400 == 0){
System.out.println(ano + " é bissexto.");
// se o ano for menor que 400
} else if((ano % 4 == 0) && (ano % 100 != 0)){
System.out.println(ano + " é bissexto.");
} else{
System.out.println(ano + " não é bissexto");
}}
}
estou no caminho certo? queria saber como faço para poder validar o dia mes e ano
Acho que não está bom porque você só faz as verificações depois que já mudou os valores dos campos.
Seria melhor primeiro verificar, e só se a data for válida, aí você seta os valores. Algo assim:
public class DiaMesAno {
private int dia, mes, ano;
public DiaMesAno(int dia, int mes, int ano) {
if (!valido(dia, mes, ano)) { // se não válida, nem cria a instância, lança uma exceção para indicar que está errado
throw new IllegalArgumentException("Valores inválidos");
}
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
private boolean bissexto(int ano) {
return (ano % 4 == 0) && ((ano % 100) != 0 || (ano % 400) == 0);
}
private boolean valido(int dia, int mes, int ano) {
if (mes < 1 || mes > 12) { // mês inválido
return false;
}
// ver a quantidade de dias no mês
int qtdDias = 31;
if (mes == 4 || mes == 6 || mes == 9 || mes == 11) {
qtdDias = 30;
} else if (mes == 2) {
qtdDias = bissexto(ano) ? 29 : 28;
}
if (dia < 1 || dia > qtdDias) {
return false;
}
return true;
}
public int getDia() {
return dia;
}
public int getMes() {
return mes;
}
public int getAno() {
return ano;
}
public void setDia(int dia) {
// valida o novo dia, usando o mês e ano que já tem
if (!valido(dia, this.mes, this.ano)) {
throw new IllegalArgumentException("Valores inválidos");
}
this.dia = dia;
}
public void setMes(int mes) {
// valida o novo mês, usando o dia e ano que já tem
if (!valido(this.dia, mes, this.ano)) {
throw new IllegalArgumentException("Valores inválidos");
}
this.mes = mes;
}
public void setAno(int ano) {
// valida o novo ano, usando o mês e dia que já tem
if (!valido(this.dia, this.mes, ano)) {
throw new IllegalArgumentException("Valores inválidos");
}
this.ano = ano;
}
}
Se a data for inválida eu lanço uma exceção, pois não acho que faz sentido criar uma instância se os valores não forem válidos. E veja como os métodos que fazem as verificações retornam um boolean
, que indica se é válido ou não. Da forma que você fez, as verificações não servem para muita coisa. Já fazendo assim, você consegue saber se a data é válida ou não.
Claro que eu faria assim só se for um exercício, pois no Java já temos coisas prontas. A partir do Java 8, dá para usar java.time.LocalDate
:
public class DiaMesAno {
private LocalDate data;
public DiaMesAno(int dia, int mes, int ano) {
this.data = LocalDate.of(ano, mes, dia);
}
}
Se a data for inválida, o método of
já lança uma exceção (DateTimeException
).