Números aleatórios

9 respostas
Rooney

Alguem pode me dizer como faço pra nunca se repetir os números nesse código, porq de vez em quando se repetem 2.

int x = 1 + (int)(Math.random() * 10);
        jLabel14.setText(""+x);
        int y = 1 + (int)(Math.random() * 10);
        jLabel15.setText(""+y);

    int letra = 1 + (int)(Math.random()*4);
    //aki ele somara os dois numeros gerados
    //Resposta correta
        setResposta(x + y);

    //respostas aleatorias
     a = 1 + (int)(Math.random() * 20);
     b = 1 + (int)(Math.random() * 20);
     c = 1 + (int)(Math.random() * 20);
     d = 1 + (int)(Math.random() * 20);

9 Respostas

Naruffy

Use o objeto Random, eh mais facil do o que método do Math

Random r = new Random();
// retorna um número aletória de 0 a 10
r.nextInt(10);

[]s

E

Você precisa anotar que números já saíram, para que você tente novamente pegar um novo número. É igual a jogar dados; volta e meia sai um número que já saiu. Então você precisa jogar o dado de novo, até que apareça um número que não apareceu antes.

WendersonLP

Exemplo prático:

public static void main(String[] args) {
     Random rand = new Random();
     ArrayList<Integer> list = new ArrayList<Integer>();
     int quantidadeDeNumeros = 10;
   
     for (int count = 0; i < quantidadeDeNumeros;i++) {
          int numeroAuxiliar = rand.nextInt(10); // ou rand.nextInt();

          // enquanto o número contiver na lista
          // é lido outro número
          while (list.contains(numeroAuxiliar)) {
                numeroAuxiliar = rand.nextInt(); // ou rand.nextInt();
          }
          list.add(numeroAuxiliar);
     }
     System.out.println(list);
}
Rooney

mas é porq tenho q entregar isso daki a pouco como posso fazer não se repetir no meu código?

sergiotaborda

Vamos lá a ver se aprendem a usar OO para este problema.

  1. Não use Random.
  2. Não repetir = usar Set
  3. Escolher números aletatoriamente num intervalo discreto ( de numeros inteiros) é a mesma coisa que sortear esses mesmos numeros de um conjunto.
  4. Sortear numero de um conjunto faz -se assim:
public <T> Collection<T>  sortear(Set<T> conjuntoDeTodosOsElementosPossiveis , int quantosSeraoSorteados){

          // se o conjunto não tem elementos suficientes dá erro
          if( conjuntoDeTodosOsElementosPossiveis.size() < quantosSeraoSorteados){
               throw new IllegalArgumentException("Não ha " + quantosSeraoSorteados + " elementos no conjunto");
          }

          // o método suffle altera apenas listas e modifica o objeto passado. Por isso copiamos tudo para uma lista primeiro
          List<T> conjunto = new ArrayList<T>(conjuntoDeTodosOsElementosPossiveis ); // isto faz a copia

          // sorteia

          Collections.shuffle(conjunto); // shuffle significa "embaralhar'

          Collection<T> resultado = new ArrayList<T>(quantosSeraoSorteados);

          for(int i = 0; i < quantosSeraoSorteados; i++){
               resultado.add(conjunto.get(0)); // sempre pega o primeiro. à medida que são removidos ha mesmos elementos
         }
        return resultado;
}

Sortear de 4 numeros de 1 a 20

//cria o conjunto de numeros
Set<Integer> numeros = new Hashset<Integer>();

for( int i = 1 ; i <= 20 ;i++){
      numeros.add(i);
}

// usa o método 

Collection<Integer> sorteados = sortear(numeros, 4);
E

Pois é, comidinha na boca todo mundo quer. Já lhe deram a comidinha na boca, que tal parar de reclamar, hein?

[quote=Matrix]
There is no spoon

[quote]

renamed

Resumindo um pouco o que o sergiotaborda disse, se vc quer sortear 4 números aleatorios de 1 a 20, pode criar uma lista, inserir os elementos 1, 2, 3, ... , 19, 20 nessa lista e depois embaralhá-la.

public static void main(String[] args) {

		List<Integer> lstNumeros = new ArrayList<Integer>();

		for (int i = 0; i < 20; i++) {
			lstNumeros.add(new Integer(i + 1));
		}

		Collections.shuffle(lstNumeros); // Embaralha os números
		
		System.out.println("Numeros escolhidos:");
		for(int i = 0; i < 4; i++){
			System.out.print(lstNumeros.get(i) + " ");
		}

	}

ok?

Rooney

ok mano vou dar uma olhada como q eu termino esse meu programa, mesmo assim obrigado.
:smiley:

T
Criado 14 de dezembro de 2009
Ultima resposta 15 de dez. de 2009
Respostas 9
Participantes 7