Estou tentando fazer o teste para que datas como 31/2 não sejam aceitas, mas não consigo fazer com que o método que valida a data seja testado dentro do método que formata a data.
class Data {
int dia;
int mes;
int ano;
public boolean dataValida(int d, int m, int a) {
if (d > 31) return false;
if (m > 12) return false;
if ((m == 4 || m == 6 || m == 9 || m == 11) && (dia > 30)) {
return false;
}
if (m == 2) {
if (bissexto (a)) {
if (d > 29) return false;
} else {
if (d > 28) return false;
}
} return true;
}
boolean bissexto (int a) {
return (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0));
}
String formatada() {
if(this.dataValida() == false) {
return ("Data Inválida");
} else {
String d = this.dia + "/" + this.mes + "/" + this.ano;
return d;
}
}
}
Se estiver trabalhando com tempo, de uma pesquisada sobre a classe LocalDateTime, que quebra um galho enorme. Com ela vc pode tbm pedir pra retornar um momento - de segundos a anos - específico. Relaxe, pra coisas assim nós programadores nao precisamos sofrer… vendo se tem alguma Biblioteca, Framework, etc, que faça as partes chatas/complicadas/desnecessárias/difíceis, a menos que queira reinventar a roda… :), então nesse caso veja se isso funciona: esse cálculo de bissexto, ou passando um parâmetro nesse this.dataValida ().
Obrigado! Na realidade este é um exercício que estou fazendo da apostila do Caelum, ela pede que você não permita que dadas como 31/02 sejam aceitas, e precisa ser feito sem utilizar classes prontas! O erro que esta dando é nesta linha "if(this.dataValida() == false) ", pois como tive de criar a formatada() como String, ele não está aceitando o teste utilizando um boolean. Sou iniciante, desculpe não saber explicar bem.
Não é assim.
Veja. Você criou dois objetos c e c1 instanciando a Classe Conta.
Chamou o método setData passando parâmetros para os atributos da classe, mas não chamou o método dataValida repassando os valores que atribuiu.
O erro no this.dataValida() == false é justamente porque não tem o preenchimento dos argumentos no método.