Random()

3 respostas
S
int[]ger= new int[20];

        for (int i=0;i<25;i++){
	ger[i]= (int)Math.floor(Math.random()*51);
	for (int cont=0;cont<i;cont++){
	       while (ger[i]==ger[cont]){
		ger[i]= (int)Math.floor(Math.random()*20);
	      }
                 }
        }

[color=violet]Olá, fiz esse código para gerar 20 numeros entre 0 e 19, e que nao sejam repetidos.

Porém, ele ainda gera numeros repetidos !!!

Alguém poderia me dizer o porquê ? O que fiz de errado ou deixei de fazer ???

Obrigada [/color]

3 Respostas

S

[color=violet]corigindo .... esse é o codigo q eu fiz[/color]

int[]ger= new int[20];
 
         for (int i=0;i<20;i++){
 	ger[i]= (int)Math.floor(Math.random()*20);
 	for (int cont=0;cont<i;cont++){
 	       while (ger[i]==ger[cont]){
 		ger[i]= (int)Math.floor(Math.random()*20);
 	      }
                  }
         }
akumaldo
sky:
[color=violet]corigindo .... esse é o codigo q eu fiz[/color]
int[]ger= new int[20];
 
         for (int i=0;i<20;i++){
 	ger[i]= (int)Math.floor(Math.random()*20);
 	for (int cont=0;cont<i;cont++){
 	       while (ger[i]==ger[cont]){
 		ger[i]= (int)Math.floor(Math.random()*20);
 	      }
                  }
         }
Tente usar a classe Random...da java.util
Random rd = new Random;
int rd = 1+rd.nextInt(20);
nesse caso será gerado numeros de 1 a 20 aleatoriamente...

espero que funcione...:D

T
import java.util.*;

class TesteShuffle {
    /**
     */
    public static void main(String[] args) {
        // Embaralhar os valores entre 0 e 19 - maneira simples
        List valores = new ArrayList();
        for (int i = 0; i < 20; ++i) {
            valores.add (new Integer(i));
        }
        Collections.shuffle (valores);
        System.out.println (valores);
        // Embaralhar os valores entre 0 e 19 - como o professor está pensando
        int[] vals = new int[20];
        for (int i = 0; i < 20; ++i) {
            vals[i] = i;
        }
        for (int i = 19; i >= 1; --i) {
            int j; // uma posição entre 0 e (i - 1)
            j = (int) (Math.random() * i);
            // trocar entre si as posições i e j
            int tmp = vals[i];
            vals[i] = vals[j];
            vals[j] = tmp;
        }            
        for (int i = 0; i < 20; ++i) {
            System.out.print (vals[i] + ", ");
        }
        System.out.println();
        // Embaralhar os valores entre 0 e 19 - pelo método da força bruta
        int[] numeros = new int[20];
        numeros[0] = (int) (Math.random() * 20); // achar o primeiro número
        for (int i = 1; i < 20; ) {
            int val = (int) (Math.random() * 20);
            boolean achou = false;
            for (int j = 0; j < i; ++j) {
                if (numeros[j] == val) {
                    achou = true;
                    break;
                }
            }
            if (!achou) {
                numeros[i] = val;
                ++i;
            }                
        }
        for (int i = 0; i < 20; ++i) {
            System.out.print (numeros[i] + ", ");
        }
        System.out.println();
    }
}
Criado 10 de julho de 2006
Ultima resposta 10 de jul. de 2006
Respostas 3
Participantes 3