Como posso formatar hora no java

Eu estou fazendo um programa que armazena informações de hora e temperatura em uma matriz 2x48. Em uma coluna da matriz eu armazeno as informações de hora e na outra as informações da temperatura para ser exibida como forma de tabela. Então eu gostaria de saber como posso armazenar a hora no indice e imprimir ela formatada ex: 1230 em “12:00”

public static void main(String[] args) {
        int matriz [][] = new int[48][2];
        int aux;
        Random aleatorio = new Random();

//      Prencher os indices do eixo y1 da matriz com valores aleatorios (temperatura)
        for(int i=0; i<48; i++){
            matriz [i][1]= aleatorio.nextInt(8)+18;
        }
//      Preencher os indices do eixo y0 da matriz com valores das horas de 30 em 30 min
        for(int i=1; i<48; i=i+2){
           matriz [i][0] = 30;
            }
//      Ordenar o eixo y1 da matriz
        for(int i=0; i<48; i++){
            for(int j=i+1; j<48; j++){
                if(matriz[j][1]<matriz[i][1]){
                    aux=matriz[i][1];
                    matriz[i][1]=matriz[j][1];
                    matriz[j][1]=aux;
                }
            }
        }
//      Imprimir a matriz
        System.out.println("X    Y");
        for(int i=0; i<48; i++){
            for(int j=0; j<2; j++){
                System.out.print(matriz[i][j]+"   ");
            }
            System.out.print(" "+"\n");
        }
    }

Saída:
saida

São 48 linhas pois a temperatura deve ser registrada de 30 em 30 min no dia.
Eu também não sei como posso armazenar a hora de uma boa forma.
Se puderem me ajudar eu agradeço!

Eu criaria uma classe Registro com dois atributos: LocalDateTime hora e double temperatura, aí é só fazer um array de Registro com 48 posições.

Um exemplo de código !

package matriz;

import java.text.DecimalFormat;

public class TabelaHoraTemperatura {

	public static void main(String[] args) {

		double[][] tabela = new double[2][48];

		// Preenche a primeira coluna com os valores das horas
		for (int i = 0; i < 24; i++) {
			DecimalFormat formato = new DecimalFormat("00");
			String hora = formato.format(i) + ":00";
			tabela[0][i] = Double.parseDouble(hora.replace(":", ""));
			tabela[0][i + 24] = Double.parseDouble(hora.replace(":", "")) + 1200;
		}

		// Preenche a segunda coluna com valores aleatórios de temperatura
		for (int i = 0; i < 48; i++) {
			tabela[1][i] = Math.random() * 30 + 20;
		}

		// Exibe a tabela na tela
		System.out.println("Hora\tTemperatura");
		for (int i = 0; i < 48; i++) {
			int hora = (int) tabela[0][i] / 100;
			int minuto = (int) tabela[0][i] % 100;
			System.out.println(hora + ":" + minuto + "\t" + tabela[1][i] + " °C");
		}
	}
}

Fiz um teste com seu código e percebi que as horas não estão corretamente formatadas. As primeiras linhas da saída foram:

Hora    Temperatura
0:0 44.362919545136364 °C
1:0 33.15943369265191 °C
2:0 44.32650087653621 °C
3:0 38.599118743498664 °C

Mas por se tratar de horário, não deveria ser 00:00, 01:00, etc? Além disso, nas últimas linhas tem “horários” como 35:0 (35 horas?) que certamente não é um horário válido.


Enfim, eu seguiria a sugestão do @staroski e primeiro criaria uma classe para representar o registro de temperatura (contendo a data e a respectiva temperatura). Usei int porque é o que foi usado no código original, mas claro que pode ser mudado para double se for o caso. E para a data/hora, usei LocalDateTime (que guarda a data e a hora) - sei que o código só está registrando horários, mas entendo que nestes casos seria interessante saber o dia também:

import java.time.LocalDateTime;

public class RegistroTemperatura {
    private LocalDateTime dataHora;
    private int temperatura;

    public RegistroTemperatura(LocalDateTime dataHora, int temperatura) {
        this.dataHora = dataHora;
        this.temperatura = temperatura;
    }

    public LocalDateTime getDataHora() {
        return dataHora;
    }

    public int getTemperatura() {
        return temperatura;
    }
}

Depois, basta criar o array de registros e em seguida exibir os dados:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;

public class Teste {
    public static void main(String[] args) throws Exception {
        RegistroTemperatura registros[] = new RegistroTemperatura[48];
        Random rand = new Random();

        // horário inicial: data de hoje à meia-noite
        LocalDateTime dt = LocalDate.now().atStartOfDay();
        // use length, assim se o tamanho do array mudar, vc não precisa alterar o for
        for (int i = 0; i < registros.length; i++) {
            registros[i] = new RegistroTemperatura(dt, rand.nextInt(8) + 18);
            dt = dt.plusMinutes(30); // próximo horário, 30 minutos depois
        }

        // Exibe a tabela na tela
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("HH:mm");
        System.out.println("Hora\tTemperatura");
        for (RegistroTemperatura registro : registros) {
            System.out.printf("%s\t%d\n", registro.getDataHora().format(fmt), registro.getTemperatura());
        }
    }
}

Usei o mesmo cálculo (rand.nextInt(8) + 18) para gerar uma temperatura aleatória. Só não entendi porque ele ordena as temperaturas, mas enfim, qualquer coisa é só ordenar o array. A saída é:

Hora    Temperatura
00:00   22
00:30   23
01:00   22
01:30   19
02:00   25
02:30   25
03:00   21
03:30   25
04:00   22
04:30   25
05:00   20
05:30   21
06:00   23
06:30   22
07:00   22
07:30   24
08:00   20
08:30   23
09:00   19
09:30   18
10:00   19
10:30   24
11:00   24
11:30   18
12:00   19
12:30   18
13:00   21
13:30   23
14:00   21
14:30   22
15:00   18
15:30   22
16:00   22
16:30   25
17:00   20
17:30   25
18:00   21
18:30   23
19:00   20
19:30   20
20:00   23
20:30   21
21:00   21
21:30   19
22:00   25
22:30   25
23:00   25
23:30   23
1 curtida