[RESOLVIDO] Como Faço para Gerar Lista de Horários Alternados

Ola amigos Javanaltas do GuJ estou com um problema quero listar horários alternados mas ate fiz um só que ele lista somente desta forma:

Exemplo : Das 7:00 ate 12:00 com intervalo 0 min ele carrega de uma em uma hora:

7:00
8:00
9:00
10:00
11:00
12:00

E se for das 7:00 ate 12:00 com intervalo 30 min ele carrega em meia em meia hora:

7:30
8:30
9:30
10:30
11:30
12:30

Veja o código:

private void btnCarregarActionPerformed(java.awt.event.ActionEvent evt) {

    int hmin = (int) spMin.getValue();
    int hmax = (int) spMax.getValue();
    int hinterv = (int) spInter.getValue();
   

    DefaultTableModel modelo = (DefaultTableModel) tab.getModel();
    modelo.setNumRows(0);

     for (int hi = hmin; hi <= hmax; hi++) {
        for (int mi = hinterv; mi <= hinterv; mi++) {
            LocalTime horaAtendimento = LocalTime.of(hi, mi);

            modelo.addRow(new Object[]{
                horaAtendimento.toString()
            });
        }
    } 
}     

Solução pretendida carregar lista com horas alternadas por exemplo.

das 7:00 ate 12:00 com intervalo de 30 min de uma forma alternada.

7:00
7:30
8:00
8:30
9:00
9:30
10:00
10:30
11:00
11:30
12:00
Se alguém puder me ajudar eu agradeço!!! Obrigado abraços a todos vocês!!!

Não sei se entendi muito bem, veja se é isso que precisa:

import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        LocalTime initialTime = LocalTime.of(7, 0,0);
        LocalTime lastTime = LocalTime.of(12, 0,0);

        List<LocalTime> time = new ArrayList<>();
        time.add(initialTime);

        int interval = 30;
        LocalTime timeAux = initialTime;

        while (timeAux.isBefore(lastTime)){
            interval = interval == 0 ? 60 : interval;
            timeAux = timeAux.plusMinutes(interval);
            time.add(timeAux);
        }

        time.forEach(System.out::println);
    }
}

Ficou Perfeito meu nobre amigo heycristhian !!! Obrigado pela ajuda!!! Abraços.

Olha como Ficou meu Código!!!

private void btnCarregarActionPerformed(java.awt.event.ActionEvent evt) {

    LocalTime initialTime = LocalTime.of((int) spMin.getValue(), 0,0);
    LocalTime lastTime = LocalTime.of((int) spMax.getValue(), 0,0);       

    int interval = (int) spInter.getValue();
    LocalTime timeAux = initialTime;
    
    
   DefaultTableModel modelo = (DefaultTableModel) tab.getModel();
    modelo.setNumRows(0);

     while (timeAux.isBefore(lastTime)){
        interval = interval == 0 ? 60 : interval;
        timeAux = timeAux.plusMinutes(interval);
         modelo.addRow(new Object[]{
                timeAux.toString()
            });
    }  

}

Obs: Usei o JSpinner para pegar a hora inicial , hora final e intervalo de minutos.

1 curtida

Boa mano, ficou bem clean. Parabéns :facepunch:

Deu um Problema amigo heycristhian ele não ta começando como por exemplo 8:00 mas sim começa com 8:30!!!

@pellegrini2106 É que no meu exemplo, antes de entrar no while eu adicionei o initialTime na lista. Tente adicionar na sua linha do modelo antes do laço, algo como isso por exemplo:

LocalTime initialTime = LocalTime.of((int) spMin.getValue(), 0,0);
LocalTime lastTime = LocalTime.of((int) spMax.getValue(), 0,0);

int interval = (int) spInter.getValue();
LocalTime timeAux = initialTime;


DefaultTableModel modelo = (DefaultTableModel) tab.getModel();
modelo.setNumRows(0);

modelo.addRow(new Object[]{
    initialTime.toString()
});

 while (timeAux.isBefore(lastTime)){
    interval = interval == 0 ? 60 : interval;
    timeAux = timeAux.plusMinutes(interval);
    modelo.addRow(new Object[]{
            timeAux.toString()
    });
}

Valeu meu amigo obrigado novamente pela ajuda!!! abraços!!!