Crear numeros aleatorios con la clase Math.(solucionado)

Iniciado por Norlak, 12 Diciembre 2011, 12:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Norlak

Buenas a todos mirad tengo un problema el cual nose porque no funciona, tengo que generar un numero entre 10 y 20 con la funcion Math.

Lo que tengo escrito es esto:
Citarpublic class Principal {

   /**
    * @param args
    */
   public static void main(String[] args) {
      // TODO Auto-generated method stub
      double z=0;
      
      do{
         z=Math.round((Math.random()*100));
         //System.out.println(z);
      }
//      
      while (z<20.0 && z>10.0);
      System.out.println(z);

   }

}

Alguien me puede explicar porque no se cumple mi condicion?, si me genera el numero pero uno cualquiera entre 0.0 hasta 100, si yo en el while le especifico las condiciones.

A alguien se le ocurre que pasa? Gracias de todas formas

PD:Felices Fiestas a todos!
Rectificar es de sabios, aprende de tus errores para ser alguien mejor.

Proteus1989

Mmmm no lo hagas así.

Mejor haz esto:

Math.random()*10+10

Con eso TODOS los números generados estarán entre 10 y 19.9 periódico

Norlak

Cita de: Proteus1989 en 12 Diciembre 2011, 12:48 PM
Mmmm no lo hagas así.

Mejor haz esto:

Math.random()*10+10

Con eso TODOS los números generados estarán entre 10 y 19.9 periódico

Gracias por contestar tan rapido amigo, esa manera ya la he hecho, pero quiero saber porque falla de esta otra gracias de todos modos!
Rectificar es de sabios, aprende de tus errores para ser alguien mejor.

Proteus1989

Porque le tienes dicho que mientras que los valores estén entre 10 y 20 NO salga xD
Solo tendrías que cambiar el < por >= y el > por <=

Norlak

Cita de: Proteus1989 en 12 Diciembre 2011, 17:12 PM
Porque le tienes dicho que mientras que los valores estén entre 10 y 20 NO salga xD
Solo tendrías que cambiar el < por >= y el > por <=

Es decir cambiar
Citarwhile (z<20.0 && z>10.0);

Por

Citar
     
      while (z>=20.0 && z<=10.0);

Gracias por tu respuesta nuevamente, pero de esta manera sigue sin funcionarme ya que me sigue dando numeros aleatorios pero de cualquier rango, gracias.
Rectificar es de sabios, aprende de tus errores para ser alguien mejor.

Proteus1989


while (z>20.0 || z<10.0);


Los iguales me acabo de fijar que excluían al 10 y al 20.

Norlak

Cita de: Proteus1989 en 12 Diciembre 2011, 18:53 PM

while (z>20.0 || z<10.0);


Los iguales me acabo de fijar que excluían al 10 y al 20.

Eres mi idolo XD, aver pero una aclaracion el "||" no significa , condicion 1 o condicion 2,

entonces no entiendo porque entra en el while XD bueno seguire buscando gracias!
Rectificar es de sabios, aprende de tus errores para ser alguien mejor.

Proteus1989

Tomaté el while como un mientras verdad hago
                                     while  condicion  do
Con el || (o) dará vueltas mientras una de esas condiciones sea cierta. Si es mayor que 20 ó menor que 10 NO me vale. Tienen que ser las dos condiciones falsas (es decir, que esté comprendido entre 10 y 20) para que se cumpla.


Se que no me he explicado bien... pero al menos lo he intentado xD

1mpuls0

Otra solución sin necesidad de utilizar mucha memoria.

Código (java) [Seleccionar]

/**
* @(#)NumerosAleatorios.java
*
*
* @author Darhius929
* @version 1.00 2011/12/13
*/
public class NumerosAleatorios {

public static void main(String args[]){
new NumerosAleatorios();
}

    public NumerosAleatorios() {
   
    double limiteUno=10.0;
    double limiteDos=20.0;
    double limiteInferior=0;
    double limiteSuperior=0;
    int totalNumeros=2;
   
    if(limiteUno<limiteDos){
    limiteSuperior=limiteDos;
    limiteInferior=limiteUno;
    }else if(limiteUno>limiteDos){
    limiteSuperior=limiteUno;
    limiteInferior=limiteDos;
    }else{
    System.out.println("El limite inferior y superior no pueden ser iguales");
    System.exit(0);
    }
   
    for(int indice=0; indice<totalNumeros;indice++){
    double numeroAleatorio=limiteInferior + ( Math.random()* ( limiteSuperior - limiteInferior  ) );
    java.text.DecimalFormat df = new java.text.DecimalFormat("0.00");
    System.out.println("El numero generado aleatoriamente es "+df.format(numeroAleatorio));
    }
    }
}


Saludos.
abc

Norlak

Cita de: Darhius en 14 Diciembre 2011, 03:55 AM
Otra solución sin necesidad de utilizar mucha memoria.

Código (java) [Seleccionar]

/**
* @(#)NumerosAleatorios.java
*
*
* @author Darhius929
* @version 1.00 2011/12/13
*/
public class NumerosAleatorios {

public static void main(String args[]){
new NumerosAleatorios();
}

    public NumerosAleatorios() {
   
    double limiteUno=10.0;
    double limiteDos=20.0;
    double limiteInferior=0;
    double limiteSuperior=0;
    int totalNumeros=2;
   
    if(limiteUno<limiteDos){
    limiteSuperior=limiteDos;
    limiteInferior=limiteUno;
    }else if(limiteUno>limiteDos){
    limiteSuperior=limiteUno;
    limiteInferior=limiteDos;
    }else{
    System.out.println("El limite inferior y superior no pueden ser iguales");
    System.exit(0);
    }
   
    for(int indice=0; indice<totalNumeros;indice++){
    double numeroAleatorio=limiteInferior + ( Math.random()* ( limiteSuperior - limiteInferior  ) );
    java.text.DecimalFormat df = new java.text.DecimalFormat("0.00");
    System.out.println("El numero generado aleatoriamente es "+df.format(numeroAleatorio));
    }
    }
}


Saludos.

Gracias amigo!
Rectificar es de sabios, aprende de tus errores para ser alguien mejor.