Como criar matriz quadrada aleatoria sem repetir numeros com radom?
3 respostas
Edugdavid
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
Como você está utilizando matrizes, vai ter que verificar se sua matriz já possui o número gerado.
Crie um método pra isso:
publicstaticint[][]geraMatriz(int[][]matriz){Randomgerador=newRandom();for(inti=0;i<matriz.length;i++){for(intj=0;j<matriz[i].length;j++){intnumero;do{numero=gerador.nextInt(9);}while(numeroJaExiste(numero,matriz));// se o número já existe na matriz, gera novamentematriz[i][j]=numero;}}returnmatriz;}privatestaticbooleannumeroJaExiste(intnumero,int[][]matriz){for(inti=0;i<matriz.length;i++){for(intj=0;j<matriz[i].length;j++){if(matriz[i][j]==numero){returntrue;}}}returnfalse;}
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:
importjava.util.ArrayList;importjava.util.List;importjava.util.Random;publicclassGloboDaSorte{privateList<Integer>numeros=newArrayList<>();publicGloboDaSorte(intde,intate){for(intnumero=de;numero<=ate;numero++){numeros.add(numero);}}publicintsortear(){if(numeros.isEmpty()){thrownewIllegalStateException("Todos os números já foram sorteados!");}Randomrandom=newRandom();intsorteado=random.nextInt(numeros.size());returnnumeros.remove(sorteado);}}
O programa em si:
publicclassPrograma{publicstaticvoidmain(String[]args){try{Programaprograma=newPrograma();programa.executar();}catch(Throwablet){t.printStackTrace();}}publicvoidexecutar()throwsException{int[][]matriz=geraMatriz(4,4);imprimir(matriz);}publicstaticint[][]geraMatriz(intlinhas,intcolunas){inttamanhoTotal=linhas*colunas;GloboDaSorteglobo=newGloboDaSorte(1,tamanhoTotal);// vou gerar números entre 1 e o tamanho total da matrizint[][]matriz=newint[linhas][colunas];for(inti=0;i<linhas;i++){for(intj=0;j<colunas;j++){matriz[i][j]=globo.sortear();}}returnmatriz;}privatevoidimprimir(int[][]matriz){for(inti=0;i<matriz.length;i++){for(intj=0;j<matriz[i].length;j++){if(j>0){System.out.print(" ");}System.out.printf("%02d",matriz[i][j]);}System.out.println();}}}