Números randomicos!?

2 respostas
J

Eu estou fazendo o jogo da memoria, são 16 posições, portanto vou usar 8 figuras.
Estou usando botões (JButton) para colocar as figuras, fazer o controle, etc.etc...

Então o que eu queria era gerar números aleatórios de 1 a 8 para colocar nas posições dos botões.
Esse número de 1 a 8 vai ser o nome do arquivo de imagem tipo, 1.jpg, 2.jpg etc...etc..

Tipo assim:

BOTÃO 1 => FIGURA => 5
BOTÃO 2 => FIGURA => 4
BOTÃO 3 => FIGURA => 2
.
.
.
Ate BOTÃO 16.

Então o número da figura tem que estar entre 1 e 8.
- Só pode repetir 1 vez o mesmo número, claro né!! hehe
- Não pode aparecer o 0 (zero)

Mas o problema e que do jeito que eu fiz esta repetindo várias vezes o mesmo número.

Alguem pode me ajudar, ou tem outra ideia sei lá! hehehe

package MEMORIASAM;
import java.util.Random;

public class Aleatorio
{
    public static void main(String[] args) 
    {
        Random r = new Random();
        for (int i = 0; i < 16; i++) 
        	System.out.println("BOTÃO : "+(i+1)+"    FIGURA : "+r.nextInt(6));
    }
}

2 Respostas

J

Eu faria isso assim:

int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8};
		
for(int i=0;i<100;i++){
   int x = (int) (Math.random()*nums.length);
   int y = (int) (Math.random()*nums.length);
   int aux = nums[x];
   nums[x] = nums[y];
   nums[y] = aux;
}

Ou assim:

int[] nums = new int[16];
for(int i = 0; i < nums.length; i++){
   int ocorrencias = 0;
   do{
      ocorrencias = 0;
      int ran = (int) (Math.random()*9);
      if(ran==0){
         ocorrencias = 3;
         continue;
      }
      nums[i] = ran;
      for(int j=0;j<nums.length;j++){
         if(nums[j]==ran){
            correncias++;
         }
      }
   }while(ocorrencias>2);
}

Sugiro que use a primeira opção nesse caso.

L

Oi jair, pow cara, naum entendi a sua primeira solucao para o problema do cara :stuck_out_tongue:

De qq forma, se quizer usar, tem mais essa solucao

final int nums = 1;
		final int maxOcorrecias = 2;
		final int req = 16;
		int[] a = new int[nums];

		if(nums * maxOcorrecias < req) {
			System.err.println("Naum tem numeros suficientes para achar solucao");
			return;
		}
		for (int i = 0; i < req; i++) {
			int x;
			do {
				x = (int) (Math.random() * nums);
			} while (a[x] >= maxOcorrecias);
			a[x]++;
			System.out.println(x);
		}
Criado 11 de outubro de 2006
Ultima resposta 12 de out. de 2006
Respostas 2
Participantes 3