Dúvida em while, criando uma linha de colunas dinâmicas

private Date inicio;
private Date fim;
private Vivero vivero;

private List<Date> datas;
private List<ValorRelatorio> lista;
private List<ValorRelatorio[]> valores;

public void gerarDatas()
{
	
	Calendar c = Calendar.getInstance();
	c.setTime(inicio);
	
	Calendar cFim = Calendar.getInstance();
	cFim.setTime(fim);
	
	while(c.compareTo(cFim) <= 10)
	{
		c.set(Calendar.DAY_OF_MONTH, 1);
		datas.add(c.getTime());
	}

public void gerar()
{
lista = new ArrayList<>();
valores = new ArrayList<ValorRelatorio[]>();
datas = new ArrayList();

	gerarDatas();
	
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
	SimpleDateFormat sdf2 = new SimpleDateFormat("EEEEE");
	
	sdf.format(inicio);
	sdf2.format(fim);
	
	ValorRelatorio[] valoresData = new ValorRelatorio[datas.size()];
	for(int j = 0; j < datas.size(); j++)
	{
		valoresData[j] = new ValorRelatorio(" ", "");
		valoresData[j] = new ValorRelatorio(" ", "");
	}

estava editando acabei enviando o código sem explicar hehe,
eu estou tentando criar um loop do período inicio até o fim, e criar colunas em uma planilha dinâmica, porém esta entrando no while e se tornando um loop eterno

while(c.compareTo(cFim) <= +1)
{
c.set(Calendar.DAY_OF_MONTH, 1);
datas.add(c.getTime());
}

e não estou consiguindo voltar do loop

O método compareTo(Calendar anotherCalendar) verifica: “Se uma data (Calendar) x quando comparada a outra data (Calendar) y”; e retorna um valor inteiro que determina um de três casos:

-> caso o retorno seja 0 (zero), as datas são iguais;
-> caso o retorno seja menor que 0 (zero), a data x é anterior (mais antiga) que a data y;
-> caso o retorno seja maior que 0 (zero), a data x é posterior (mais recente) que a data y;

Porém, você está verificando se o retorno é menor ou igual a +1? Você está tentando somar uma unidade ao retorno do método?
1 - O certo é comparar com zero, já que o caso definido no retorno baseia-se na posição de zero;

2 - Supõe-se que cFim nunca é menor que c, ou c ou é igual a cFim. Logo, c sempre posterior a cFim;

3 - Dentro do bloco do while (seu escopo) deve haver um meio de tornar a condição falsa. Logo, a condição deve ser alterada dentro do bloco while para que em determinado momento, a iteração chegue ao fim ou uma outra condição arbitrária (cujo único objetivo é finalizar o laço) torne-se falsa.
Exemplo:

short contagem = 0;

while(contagem < 100 || c.compareTo(cFim) <= 0){
	c.set(Calendar.DAY_OF_MONTH, 1);
	datas.add(c.getTime());
	
	contagem++;
}

4 - A documentação indica que:

Compara os valores de tempo (deslocamentos de milissegundos da época - Epoch) representados por dois objetos de calendário.

e

Parâmetro: o calendrio a ser comparado.

Fonte: compareTo method.

1 curtida