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

6 respostas
java
pellegrini2106

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!!!

6 Respostas

heycristhian

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);
    }
}
pellegrini2106

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.

heycristhian

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

pellegrini2106

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

heycristhian

@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()
    });
}
pellegrini2106

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

Criado 17 de dezembro de 2020
Ultima resposta 17 de dez. de 2020
Respostas 6
Participantes 2