Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

domingo, 20 de enero de 2013

Generar números aleatorios sin repetición.

En el siguiente ejemplo tenemos una baraja que consta de 10 cartas que vamos a mezclar aleatoriamente para luego mostrarlo en pantalla.


Codigo:

//Números aleatorios sin repetición
package aleatorisinrepeticion;
import java.util.Stack;

public class AleatoriSinRepeticion {
  public static void main(String[] args) {
    int pos;
    int nCartas = 10;
    Stack < Integer > pCartas = new Stack < Integer > ();
    for (int i = 0; i < nCartas ; i++) {
      pos = (int) Math.floor(Math.random() * nCartas );
      while (pCartas.contains(pos)) {
        pos = (int) Math.floor(Math.random() * nCartas );
      }
      pCartas.push(pos);
    }
    System.out.println("Núm. aleatorios sin repetición:");
    System.out.println(pCartas.toString());
  }
}


Resultado:

run:
Núm. aleatorios sin repetición:
[2, 8, 5, 7, 6, 3, 0, 9, 4, 1]
BUILD SUCCESSFUL (total time: 0 seconds)

10 comentarios:

  1. No has declarado ni inicializado pcartas ¿¿no???
    o soy yo que ya no veo tres en un burro.

    ResponderEliminar
    Respuestas
    1. Tenias razón, ya lo he modificado. Gracias por el aviso.

      Eliminar
  2. Este código es espectacular. Como puedo hacer para que no salga el numero cero, por ej . de 1 a 10.

    ResponderEliminar
    Respuestas
    1. Para que sea de 1 a 10 sería:
      pCartas.push(pos + 1);

      Eliminar
    2. Perfecto. Muchas Gracias

      Eliminar
  3. para ordenarlas de menor a mayor como se haria?

    ResponderEliminar
    Respuestas
    1. Seria algo parecido a eso:

      public double[][] getOrdenacio(double[][] xy) {
      double [][] t = xy;

      //Reordenar de menor a major
      int cont = 0;
      double aux = 0;
      while (cont < t[0].length) {
      for (int i = 0; i < t[0].length - 1; i++) {
      if (t[1][i] > t[1][i + 1]) {
      aux = t[1][i];
      t[1][i] = t[1][i + 1];
      t[1][i + 1] = aux;
      aux = t[0][i];
      t[0][i] = t[0][i + 1];
      t[0][i + 1] = aux;
      cont = 1;
      }
      cont++;
      }
      }

      return t;

      }

      Eliminar
  4. y ordenarlos en orden de 4 por cuatro es decir si son 16 espacios, es decir al estilo de una matriz, te agradeceriia que me respondieras pronto

    ResponderEliminar
    Respuestas
    1. Una vez estén ordenados con el código anterior seguir con el siguiente ejemplo:
      http://censorcosmico.blogspot.com.es/2013/01/pasar-vector-matriz.html

      Eliminar

Con la tecnología de Blogger.