Estou construindo um método em java para gerar matriz aleatória sem repetir mas estou com dificuldade na hora de criar a logica para fazer os números não repetirem.
esse é o metodo que estou desenvolvendo
public static int[][] geraMatriz(int[][] matriz) {
Random gerador = new Random();
for(int i = 0; i < matriz.length; i++) {
for(int j = 0; j < matriz.length; j++) {
matriz[i][j]= gerador.nextInt(9);
}
}
return matriz;
Como você está utilizando matrizes, vai ter que verificar se sua matriz já possui o número gerado.
Crie um método pra isso:
public static int[][] geraMatriz(int[][] matriz) {
Random gerador = new Random();
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[i].length; j++) {
int numero;
do {
numero = gerador.nextInt(9);
} while (numeroJaExiste(numero, matriz)); // se o número já existe na matriz, gera novamente
matriz[i][j] = numero;
}
}
return matriz;
}
private static boolean numeroJaExiste(int numero, int[][] matriz) {
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[i].length; j++) {
if (matriz[i][j] == numero) {
return true;
}
}
}
return false;
}
Agora eu faria o seguinte, criaria uma classe para representar um globo da sorte, igual aqueles utilizados em loterias, e utilizaria ele para alimentar minha matriz.
Classe correspondente ao globo da sorte:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class GloboDaSorte {
private List<Integer> numeros = new ArrayList<>();
public GloboDaSorte(int de, int ate) {
for (int numero = de; numero <= ate; numero++) {
numeros.add(numero);
}
}
public int sortear() {
if (numeros.isEmpty()) {
throw new IllegalStateException("Todos os números já foram sorteados!");
}
Random random = new Random();
int sorteado = random.nextInt(numeros.size());
return numeros.remove(sorteado);
}
}
O programa em si:
public class Programa {
public static void main(String[] args) {
try {
Programa programa = new Programa();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
public void executar() throws Exception {
int[][] matriz = geraMatriz(4, 4);
imprimir(matriz);
}
public static int[][] geraMatriz(int linhas, int colunas) {
int tamanhoTotal = linhas * colunas;
GloboDaSorte globo = new GloboDaSorte(1, tamanhoTotal); // vou gerar números entre 1 e o tamanho total da matriz
int[][] matriz = new int[linhas][colunas];
for (int i = 0; i < linhas; i++) {
for (int j = 0; j < colunas; j++) {
matriz[i][j] = globo.sortear();
}
}
return matriz;
}
private void imprimir(int[][] matriz) {
for (int i = 0; i < matriz.length; i++) {
for (int j = 0; j < matriz[i].length; j++) {
if (j > 0) {
System.out.print(" ");
}
System.out.printf("%02d", matriz[i][j]);
}
System.out.println();
}
}
}