Um mesmo programa. Uma mesma entrada. Varias saídas.[Resolvido]

3 respostas
Mantu

Olá pessoal.
Estou criando um agendinha bem simples (com base em um programa da andreia_19), mas estou com um problema: Resumindo, eu rodo o programa várias vezes, com a mesma entrada de dados, mas os resultados nem sempre são os mesmos… Gostaria de saber por onde eu devo começar a procurar este tipo de bug no meu programa. A seguir algumas informações que podem ajudá-los a me ajudar:
-Não uso Threads
-Tenho uma classe DataEvento para representar um intervalo de tempo, que utiliza campos java.util.Calendar para marcar o tempo de início e o de fim. Estes campos são utilizados no compareTo (A classe implementa Comparable)
-Tenho uma classe auxiliar só pra me ajudar a criar objetos Calendar, chamada (indevidamente, acho) de Factory. Aqui vai o código do método que faz isso:

public class Factory {
	public static Calendar getCalendar(
		int dia,
		int mes,
		int ano,
		int hora,
		int minuto
	) {
		Calendar result = Calendar.getInstance();
		result.setLenient(false);
		result.set(ano, mes - 1, dia, hora, minuto, 0);
		return result;
	}	
}

-Tenho uma classe abstrata Evento que representa um evento a ser incluído no calendário. Essa classe tem um campo do tipo DataEvento. Esta classe implementa Comparable e o campo do tipo DataEvento influencia na ordenação de seus objetos.
-Tenho a classe Calendario que tem um campo TreeSet
-Tenho a classe TesteCalendario, que pega um conjunto de objetos Evento e tenta inseri-los em um objeto Calendario. É nessa inserção que a bizarrice se manifesta. Algumas poucas vezes, ele consegue inserir eventos que, teoricamente, são iguais. Na maioria das vezes, funciona corretamente, não inserindo eventos que são iguais (segundo o compareTo do repectivo objeto Evento).
Vou deixar aqui o fonte completo da aplicação, caso achem necessário verificar detelhes mais profundos. E, óbviamente, podem me perguntar caso tenham dúvidas quanto ao meu problema e não estajam com o menor saco de ver os fontes.
Valeu, galera!

3 Respostas

ksi

Cara,
Não cheguei a ver o fonte, mas vou dar um chute, rs, vc diz que usa o compareTo, não tem como vc usar o equals? Estou de saída, depois dou uma olhada no código, até mais.

T

Se não me engano você tem de zerar os milissegundos também. É que cada vez que você usa Calendar.getInstance() ele pega o instante atual, e você acaba ficando com um objeto “sujo” com os milissegundos. Por favor, veja se é isso mesmo.

Mantu

Era o que o Thingol disse. Os meus objetos Calendar estavam sujos por causa do milissegundo… Como não existia uma asasinatura do método set que incluísse millisegundo, acabei não me ligando neste detalhe…
Muito obrigado Thingol!

Criado 22 de dezembro de 2006
Ultima resposta 22 de dez. de 2006
Respostas 3
Participantes 3