Verificar se o número já saiu antes não é uma boa, porque não adianta só verificar o último, vc teria que percorrer todos os números gerados até então.
Para matrizes pequenas pode até “funcionar”, mas conforme a matriz cresce isso se torna inviável. Imagine uma matriz 10x10, por exemplo (ou seja, com cem números). Quando for preencher o 90° número, vc tem que verificar os 89 anteriores pra saber se o número não se repete. Se ele é repetido, tem que gerar outro e verificar tudo de novo. Depois para o 91º número, tem que verificar os 90 anteriores e assim por diante.
Pior ainda, se os valores possíveis são de 0 a 99 (ou seja, 100 valores possíveis para preencher uma matriz 10x10), isso quer dizer que no final os números gerados por nextInt
têm mais chance de serem repetidos. Ou seja, serão necessários cada vez mais iterações até que se gere um número que ainda não saiu. Portanto, este é um método que não escala bem.
Uma alternativa simples para o seu caso é usar o algoritmo de Fisher-Yates. Basicamente, primeiro vc cria uma lista com todos os números possíveis - como você usou nextInt(100)
, quer dizer que os valores são números de 0 a 99:
// cria uma lista contendo todos os números de 0 a 99
// Para Java >= 8, pode usar streams
List<Integer> numerosPossiveis = IntStream.range(0, 100).boxed().collect(Collectors.toList());
//--------------------------------------------
// Para Java < 8, preencha a lista manualmente
List<Integer> numerosPossiveis = new ArrayList<>();
for (int i = 0; i < 100; i++) {
numerosPossiveis.add(i);
}
Depois, basta embaralhar a lista e percorrê-la normalmente, adicionando os elementos na matriz:
// embaralha a lista
Collections.shuffle(numerosPossiveis);
// matriz 2x3
int linhas = 2, colunas = 3;
int[][] matriz = new int[linhas][colunas];
Iterator<Integer> it = numerosPossiveis.iterator();
// preenche a matriz com os números
for (int i = 0; i < linhas; i++) {
for (int j = 0; j < colunas; j++) {
matriz[i][j] = it.next(); // simplesmente pega o próximo número da lista
}
}
Como a lista foi embaralhada, a matriz será preenchida de forma aleatória.
Obviamente, você deve garantir que a lista numerosPossiveis
tem uma quantidade suficiente de valores para preencher a matriz.