Números aleatórios

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.

[code]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);[/code]

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

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.

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);
}

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

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);

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]

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.

[code]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) + " ");
	}

}[/code]

ok?

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