Outra dúvida

3 respostas
ajob

Galera o que ta errado no código abaixo??? eu criei uma classe data em que ela valída a data inserida, porém se eu inserir 29/02/07 ela aceita, o que não era para ser, pois ele era para aceitar apenas se o ano fosse bisexto... e ai alguem ajuda?

package Funcionário;

public class Data {
	
	private int dia, mes, ano;
	
	Data(int dia,  int mes, int ano){
		this.setDia(dia);
		this.setMes(mes);
		this.anoBisexto(ano);
	}

	void setDia(int dia){
		if(dia>=31){
			this.dia=01;
		}
		else{
			if(dia<=0){
				this.dia = 01;
			}
			else
				this.dia = dia;
		}
		
		
	}
	
	void setMes(int mes){
		if(mes==01||mes ==03||mes ==05||mes ==07||mes ==8||mes ==10||mes ==12){
			this.mes = mes;
		}
		else{
			if(mes==04||mes ==06||mes ==9||mes ==11){
				if(this.dia==31){
					this.dia = 01;
				}
				this.mes = mes;
			}
			else{
				if(mes==2){
					if(this.anoBisexto(this.ano)){
						if(this.dia>29){
							this.dia = 01;
						}
					}
					else{
						if(this.dia>28){
							this.dia = 01;
						}
					}
				this.mes = mes;
				}
				else
					this.mes = 01;
			}
		}
	}
	
	boolean anoBisexto(int ano){
		if(ano<0){
			this.ano = 0;
			return true;
		}
		else{
			this.ano = ano;
			if(ano%4==0)
				return true;
			else
				return  false;
		}
	}
	
	String ExibeData(){
		
		String date = String.format("%d/%d/%d", this.dia, this.mes, this.ano);
		
		return date;
		
	}
}

3 Respostas

ViniGodoy

Primeiro, seu cálculo do ano bissexto está errado.

Veja a regra (tirei da Wiki brasileira):

  • São bissextos todos os anos múltiplos de 400, p.ex: 1600, 2000, 2400, 2800
  • Não são bissextos todos os múltiplos de 100 e não de 400, p.ex: 1700, 1800, 1900, 2100, 2200, 2300, 2500…
  • São bissextos todos os múltiplos de 4 e não múltiplos de 100, p.ex: 1996, 2004, 2008, 2012, 2016…
  • Não são bissextos todos os demais anos.

Implementando essa regra:

boolean anoBisexto(int ano){ if (ano % 400 == 0) return true; if (ano % 100 == 0) return 0; return ano % 4 == 0; }

Segundo, esse é o tipo de coisa facilmente testável com um depurador. Pq vc não usa? Tanto o Netbeans, quanto o Eclipse tem ótimos depuradores.
Siga seu código passo-a-passo e veja o que acontece! :slight_smile:

ajob

ééééé´…

eu uso o eclipse, como eu faria isso???

Certo suponha que a minha lógica esteja certo… tipow todos os anos multiplos de 4 são bisextos…
pq meu código aceita 29/02/07??? não era para ser bisexto, então pq ele aceita?

ViniGodoy

Dê dois cliques na barra que fica ao lado do código. Você deve ver uma bolinha vermelha aparecendo lá. Esse é o ponto onde a execução irá parar.
Ao invés de clicar no botão “Run as…” clique no botão “Debug as…”

O depurador é uma das ferramentas mais importantes para um programador. Use-o.

Você pode colocar também o programa onde vc simula o erro? Aparentemente sua lógica está certa.

Criado 20 de julho de 2008
Ultima resposta 20 de jul. de 2008
Respostas 3
Participantes 2