Valor aleatório não se repetir em Array

5 respostas
Splayer

Estou tentando fazer com que um valor Random seja guardado em um vetor sem repetir o mesmo valor, o problema que está repetindo.
Código:

int x = 2;
int y = 10;
int[][] random = new int[x][y];
String[] z= new String[40];

boolean[] usando = {
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,
    false, false, false, false,};

public void aleatoriando() {
    Random r = new Random();
    for (int j = 0; j < x; j++) {
        for (int c = 0; c < y; c++) {
            int n = r.nextInt(z.length);
            if (usando[n] == false) {
                usando[n] = true;
                random[j][c] = n;
            //} else {
                //c--;
            }
        }
    }
}

5 Respostas

A

Só faltou você postar qual é sua dúvida. Qual o resultado esperado? O que tá dando de errado?

De qualquer forma, se você quer n números inteiros aleatórios sem repetiçao de 0 a n, entao só a posiçao dos números é aleatória, pois você precisa sempre de todos os números nesse intervalo.

Sendo assim, você pode criar uma lista dom valores de 0 a n, e usar o método Collections.shuffle para obter o mesmo resultado (depois migrar o resultado pro array)

Splayer

Arrumei a postagem.
Eu estou querendo preencher um vetor de forma sequencial com números aleatórios sem guardar números já presentes no array
Exemplo:

Números sorteados: 1,5,7,9,3,5,8,7
int Vetor = new int[8];
Vetor = {1,5,7,9,3,8};

Também tem o problema de não preencher o vetor inteiro, porque ele para de gerar números antes

peczenyj

Ola

o codigo que vc postou não parece fazer sentido.

se vc quer uma lista de numeros aleatorios unicos vc tem algumas tecnicas:

  1. gere um array sequencial entre 0 e o valor maximo e pegue posições aleatorias desse array. vc tambem pode embaralhar esse array e pegar os primeiros N valores.
  2. gere numeros e adicione em um Set até completar o tamanho ( o Set é uma Collection que armazena valores não-repetidos )
  3. crie um algoritmo que retorne uma lista de numeros aleatorios nao repedidos pseudo-randomico ( deve existir )
Splayer

O problema é que eu não consigo, já tentei várias vezes e nada. Você poderia criar um código?
Obs: Eu queria colocar os números aleatórios no array em posições com ordem crescente
Exemplo:

vetor[0] = 15;
vetor[1] = 4;
vetor[2] = 7;
Jonas_B_a_r_r_o_s

Então, fiz esse exemplo para você: Vê se te serve.
Coloquei para randomizar com um valor maximo de 50, com esse valor as chances de se repetirem são bem menores. Caso você queira numeros não repetidos, você pode fazer uma verificação básica, coloca-los dentro de um novo vetor os não repetidos. Sem tempo esses dias, posso fazer depois

import java.util.Arrays;
import java.util.Random;
//import java.util.Scanner;
public class ExemploVetor
{   public static void main(String args[])
	{ //Scanner entrada = new Scanner(System.in);
        Random rand = new Random();
	  int x, vet[];
	  vet = new int[5];
          System.out.println("Numeros sorteados \n");
          for (x=0;x<5;x++)
	    { //System.out.print("Digite o " + (x+1) + "o elemento de A ");
	      vet[x] = rand.nextInt(50);
                System.out.print(vet[x]+ " ");
	    }
         
            System.out.println("\n\nVetor ordenado em ordem decrescente \n\n"+Arrays.toString(decrescente(vet)));
            
	  ordena(vet);
	  System.out.print("\n\nVetor ordenado em ordem crescente \n\n");
	  for (x=0;x<5;x++)
	    System.out.print(vet[x] + " ");
	}

	public static void ordena(int v[])
	{ int i, j, aux;
	  for (i=0;i<5;i++)
	    { for (j=0;j<4;j++)
			{ if (v[j] > v[j+1])
			     { aux = v[j];
			       v[j] = v[j+1];
			       v[j+1] = aux;
			     }
			
	    	}
		}
	}
        
        public static int[] decrescente(int v[])
	{ int i, j, aux;
	  for (i=0;i<5;i++)
	    { for (j=0;j<4;j++)
			{ if (v[j] < v[j+1])
			     { aux = v[j];
			       v[j] = v[j+1];
			       v[j+1] = aux;
			     }
			
	    	}
		}
          return v;
	}
}
Criado 7 de setembro de 2016
Ultima resposta 7 de set. de 2016
Respostas 5
Participantes 4