Enum em meses para Java

Modifique a operação mostraData() no modelo Data para que o mês seja mostrado por extenso.

public class Data {
private int dia, mes, ano;

public void inicializaData(int dia, int mes, int ano) {
	if (dataÉVálida(dia, mes)) {
		this.dia = dia;
		this.mes = mes;
		this.ano = ano;
	} else {
		this.dia = 0;
		this.mes = 0;
		this.ano = ano;
	}
}

public boolean dataÉVálida(int dia, int mes) {
	if ((dia >= 1 && dia <= 31) && (mes >= 1 && mes <= 12)) {
		return true;
	}
	return false;
}

public void mostraData() {
	if (this.dia == 0 && this.mes == 0) {
		System.out.println("Data inválida");
	} else {
		System.out.println(this.dia + "/" + this.mes + "/" + this.ano);
	}
}

public int getDia() {
	return dia;
}

public void setDia(int dia) {
	this.dia = dia;
}

public int getMes() {
	return mes;
}

public void setMes(int mes) {
	this.mes = mes;
}

public int getAno() {
	return ano;
}

public void setAno(int ano) {
	this.ano = ano;
}


public String toString() {
	return "Data [" + dia + "/" + mes + "/" + ano + "] ";
}

}

Olá pessoal, tenho essa questão para resolver, sou iniciante em Java.
Sei que posso resolver essa questão com array e etc, mas quero praticar Enum. Minha idéia é que para cada número dado no private int mes, eu possa pegar uma String com o nome do mês referente a esse número, por exemplo (if this.mes == 1) { System.out.println(“Janeiro”);

O código que fiz do Enum até agora foi esse.

public enum MesesEnum {
Janeiro(1), Fevereiro(2), Março(3), Abril(4), Maio(5), Junho(6), Julho(7), Agosto(8), Setembro(9), Outubro(10),
Novembro(11), Dezembro(12);

public int valorMes;

MesesEnum(int valor) {
	valorMes = valor;
}

public int getValorMes() {
	return valorMes;
}

}

A partir daqui não sei mais oque fazer. Vocês podem me ajudar ? Dá pra resolver esse problema da questão com Enum, ou realmente Enum não foi feito pra isso e tenho que usar outras ferramentas ? Obrigado.

E aí,

Dá uma lida nisso: https://www.devmedia.com.br/tipos-enum-no-java/25729

1 curtida

Cada elemento do enum é uma constante, assim sendo, deve ser escrita com letra maiúscula.

O construtor deveria ser privado.

Você não tem um método public static que permita obter o nome do mês a partir do número do mês.

1 curtida

Embora a linguagem Java aceite o uso de pontuação (Unicode) em nomes de variáveis, de classes, métodos, etc., é interessante evitar seu o uso.

1 - Enum encapsulado

public enum Meses {
	JAN(1, "Jan", "Janeiro"),
	FEV(2, "Fev", "Fevereiro"),
	MAR(3, "Mar", "Março"),
	ABR(4, "Abr", "Abril"),
	MAI(5, "Mai", "Maio"),
	JUN(6, "Jun", "Junho"),
	JUL(7, "Jul", "Julho"),
	AGO(1, "Ago", "Agosto"),
	SET(1, "Set", "Setembro"),
	OUT(1, "Out", "Outubro"),
	NOV(1, "Nov", "Novembro"),
	DEZ(1, "Dez", "Dezembro");
	
	/*
	* Construtor da enum
	*/
	private Meses(int codigoMes, String mesAbreviado, String nomeMesCompleto){
		this.codigoMes = codigoMes;
		this.mesAbreviado = mesAbreviado;
		this.nomeMesCompleto = nomeMesCompleto;
	}
	
	/*Campos*/
	private int codigoMes;
	private String mesAbreviado;
	private String nomeMesCompleto;
	
	public int getCodigoMes(){
		return this.codigoMes;
	}
	
	public String getMesAbreviado(){
		return this.mesAbreviado;
	}
	
	public String getNomeMesCompleto(){
		return this.nomeMesCompleto;
	}
}

2 - Classe de teste

public class TesteEnum {
	private int dia;
	private int mes;
	private int ano;
	
	public TesteEnum(int ... itemData){
		this.dia = itemData[0];
		this.mes = itemData[1];
		this.ano = itemData[2];
		
	}
	
	private boolean datavalida(int diaInformado, int mesInformado, int anoInformado){
		if(anoInformado >= 1900){
			if(mesInformado > 0 && mesInformado <= 12)
				if(diaInformado > 0 && diaInformado <= 31)
					return true;
		}
		return false;
	}
	
	private void mostrarData(){
		if(datavalida(getDia(), getMes(), getAno())){
			System.out.println(getDia() + "/" + Meses.values()[getMes() - 1].getNomeMesCompleto() + "/" + getAno());
		}
	}
	
	/*
	*Métodos acessores e modificadores
	*/
	public void setDia(int dia){
		this.dia = dia;
	}
	
	public int getDia(){
		return dia;
	}
	
	public void setMes(int mes){
		this.mes = mes;
	}
	
	public int getMes(){
		return mes;
	}
	
	public void setAno(int ano){
		this.ano = ano;
	}
	
	public int getAno(){
		return ano;
	}
	
	/*
	*Método main
	*/
	public static void main(String[] args){
		TesteEnum testeEnum = new TesteEnum(16, 9, 2019);
		testeEnum.mostrarData();
	}
}

Exemplo:
image

1 curtida

Muito obrigado, este código já me ajudou a resolver uma questão posterior desta lista de exercícios!