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)

14 comentarios:

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

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

    ResponderEliminar
  3. 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
  5. para Generar números aleatorios con repetición cual seria la modificacion gracias muy buen codigo

    ResponderEliminar
    Respuestas
    1. De este mismo código quitando el while xd

      Eliminar
  6. Publico mi codigo, como lo novato que soy:


    import java.util.*;

    import java.util.ArrayList;
    public class Main {




    public static void main(String[] args) {

    ArrayList ganadores = new ArrayList();
    int concursantes=100; //RANGO DE NUMEROS AL TIRAR AL AZAR 0-100 por ejemplo
    int aleatorios = 3; //CUANTOS RESULTADOS QUIERES ASIGNAR
    int random;

    for (int i = 0; i < aleatorios; i++) {
    random = (int) Math.floor(Math.random() * concursantes + 1);
    while (ganadores.contains(random)) {
    random = (int) Math.floor(Math.random() * concursantes + 1);

    }
    ganadores.add(random);

    System.out.println((i + 1)+".-" + " LUGAR CODIGO GANADOR: " +random);
    }

    }


    }

    ResponderEliminar
  7. Buenos días como están, estoy empezando en este mundo de lo que es la programación en java y me preguntaba si ese ejemplo se le puede aplicar el método de ordenamiento por selección, de ante manos gracias por el ejemplo es muy bueno.

    Saludos

    ResponderEliminar

Con la tecnología de Blogger.