Boa noite, estou com um exercício da faculdade e estou com dificuldades na implementação em uma parte do código:
Exercício:
Crie a classe Data conforme especificado abaixo:
Data
- dia: int
- mes: int
- ano: int
- Data()
- Data(int d, int m, int a)
- entraDia(int d)
- entraMes(int m)
- entraAno(int a)
- entraDia()
- entraMes()
- entraAno()
- retDia(): int
- retMes(): int
- retAno(): int
- mostra1(): String
- mostra2(): String
- bissexto(): boolean
- diasTranscorridos(): int
- apresentaDataAtual ():void
O construtor Data() deverá permitir ao usuário digitar os valores de dia, mês e ano e com eles
inicializar os atributos da classe. Os valores digitados deverão ser consistidos e só aceitos se válidos,
caso contrário, redigitar;
O construtor Data(int d, int m, int a) deverá receber os valores de dia, mês e ano e com eles inicializar
as propriedades da classe;
Os métodos entraDia(int d), entraMes(int m) e entraAno(int a) devem receber um valor e atribuí-lo às
respectivas propriedades;
Os métodos entraDia (),entraMes () e entraAno () devem permitir ao usuário digitar um valor e atribuí-
lo a respectiva propriedade. Os valores digitados devem sofrer consistência e só aceitos quando válidos,
caso contrário, solicitar ao usuário redigitar;
Os métodos retDia(), retMes() e retAno() devem nos devolver as respectivas propriedades;
O método mostra1() deve nos devolver a data no formato: dd/mm/aaaa;
O método mostra2() deve nos devolver a data no formato: dd/mesPorExtenso/ano;
O método bissexto() deve nos devolver um boolean informando se o ano é ou não bissexto;
O método diasTranscorridos, deve retornar a quantidade de dias transcorridos no ano até a data
digitada.
O método apresentaDataAtual() deve imprimir a data atual, utilizando as classes Date e DateFormat, o
DateFormat empregando o seguinte método: getDateInstance(DateFormat.FULL);
Conveniente colocar tratamento de exceção para as possíveis inconsistências na entrada de dados.
meu código:
package data;
import java.text.DateFormat;
import java.util.Scanner;
import java.util.Date;
public class Data {
Scanner sc = new Scanner(System.in);
private int dia;
private int mes;
private int ano;
public Data(){
do{
System.out.println("Digite o ano: (0~2019): ");
ano = sc.nextInt();
}while(ano <0 || ano > 2019);
do{
System.out.println("Digite o mes: (1~12): ");
mes = sc.nextInt();
}
while(mes <1 || mes>12);
do{
if(mes == 2){
System.out.println("Digite o dia: (1~29");
dia = sc.nextInt();
}
while(dia < 1 || dia > 29);
public Data(int d, int m, int a){
this.dia = d;
this.mes = m;
this.ano = a;
}
public void entraDia(int d){
this.dia = d;
}
public void entraMes(int m){
this.mes = m;
}
public void entraAno(int a){
this.ano = a;
}
public void entraDia(){
do{
System.out.println("Digite o dia: (1~30)");
dia = sc.nextInt();
}
while(dia <1 || dia > 30);
}
public void entraMes(){
do{
System.out.println("Digite o mes: (1~12)");
mes = sc.nextInt();
}
while(mes <1 || mes > 12);
}
public void entraAno(){
do{
System.out.println("Digite o ano: (0~2019)");
ano = sc.nextInt();
}
while(dia <0 || dia > 2019);
}
public int retDia(){
return dia;
}
public int retMes(){
return mes;
}
public int retAno(){
return ano;
}
public String mostra1(){
String A = (this.dia+":"+this.mes+":"+this.ano);
return A;
}
public String mostra2(){
String mes;
String dia;
String ano;
if(this.mes == 1){ mes = "Janeiro";}
else if(this.mes == 2){ mes = "Fevereiro";}
else if(this.mes == 3){ mes = "Março";}
else if(this.mes == 4){ mes = "Abril";}
else if(this.mes == 5){ mes = "Maio";}
else if(this.mes == 6){ mes = "Junho";}
else if(this.mes == 7){ mes = "Julho";}
else if(this.mes == 8){ mes = "Agosto";}
else if(this.mes == 9){ mes = "Setembro";}
else if(this.mes == 10){ mes = "Outubro";}
else if(this.mes == 11){ mes = "Novembro";}
else { mes = "Dezembro";}
if(this.dia < 10){ dia = "0"+this.dia;}
else{ dia = ""+this.dia; }
if(this.ano < 10){ ano = "000"+this.ano;}
else if(this.ano < 100){ ano = "00"+this.ano;}
else{ ano = ""+this.ano;}
return dia+"/"+mes+"/"+ano;
}
public boolean bissexto(){
if ( ( ano % 4 == 0 && ano % 100 != 0 ) || ( ano % 400 == 0 ) ){
return true;
}
else{
return false;
}
}
public int diasTranscorridos(){
int diastrans = 0;
switch (this.mes) {
case 3: case 5:
case 7: case 8: case 10:
case 12:
diastrans += 31;
break;
case 4: case 6: case 9: case 11:
diastrans += 30;
break;
case 2:
diastrans += 28;
break;
}
diastrans += this.dia;
if (bissexto() == true && this.mes > 2 ){
diastrans += 1;
}
return diastrans;
}
public void apresentaDataAtual(){
Date data = new Date();
System.out.println("Data atual: "+ DateFormat.getDateInstance(DateFormat.FULL).format(data));
}
public static void main(String[] args) {
TestaData teste = new TestaData();
teste.Teste();
}
}
a minha dificuldade esta no tratamento de exceções com relação aos dias que o usuário pode inserir
public Data(){
do{
System.out.println("Digite o ano: (0~2019): ");
ano = sc.nextInt();
}while(ano <0 || ano > 2019);
do{
System.out.println("Digite o mes: (1~12): ");
mes = sc.nextInt();
}
while(mes <1 || mes>12);
do{
if(mes == 2){
System.out.println("Digite o dia: (1~29");
dia = sc.nextInt();
}
while(dia < 1 || dia > 29);
não estou conseguindo implementar nenhuma lógica para que ele possa digitar apenas dias entre 1 e 30 nos meses Abril, Junho, Setembro e Novembro, principalmente com relação á Fevereiro, se alguém puder me dar uma luz, agradeço!