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