2012-06-19 49 views
8

Tengo un escenario en una aplicación web java, donde se debe generar un valor hexadecimal aleatorio. Este valor debe estar dentro de un rango de valores especificado por mí. (El rango de valores puede ser valores hexadecimales o enteros).java- cómo generar un valor hexadecimal aleatorio dentro del rango de valores especificado

¿Cuál es la forma más eficiente de hacer esto? ¿Tengo que generar un número decimal aleatorio y luego convertirlo a hexadecimal? ¿O puede un valor ser generado directamente?

+6

'Integer.toHexString (yourRandomNumber) 'no es suficiente? –

Respuesta

13

Sí, solo genera un valor decimal en su rango. Algo como:

Random rand = new Random(); 
int myRandomNumber = rand.nextInt(0x10) + 0x10; // Generates a random number between 0x10 and 0x20 
System.out.printf("%x\n",myRandomNumber); // Prints it in hex, such as "0x14" 
// or.... 
String result = Integer.toHexString(myRandomNumber); // Random hex number in result 

Hex y números decimales se manejan de la misma manera en Java (como enteros), y se acaba de muestra o se introduce de manera diferente. (. More info on that)

+0

Muéstremelo ... –

+0

Acaba de generar un número * binario * en su rango ... – EJP

+0

'rand.nextInt (0x10)' no generará 0x10, solo 0..0xF. Ver [JavaDoc Random] (http://docs.oracle.com/javase/6/docs/api/java/util/Random.html) _Returna un valor int pseudoaleatorio distribuido uniformemente entre 0 (inclusive) y el valor especificado (exclusivo) _ – hgoebl

4

Prueba de esto,

String s = String.format("%x",(int)(Math.random()*100)); 
System.out.println(s); 
+0

Al OP le gustaría que el número hexadecimal esté en un rango. Esto no lo hace, ¿verdad? –

0
Random randomService = new Random(); 
StringBuilder sb = new StringBuilder(); 
while (sb.length() < RANDOM_HEX_LENGTH) { 
    sb.append(Integer.toHexString(randomService.nextInt())); 
} 
sb.setLength(RANDOM_HEX_LENGTH); 
System.out.println(sb.toString()); 
-1

azar progresivas colores Hex:

String letters[] = "ABCDEF".split(""); 
int min=letters.length-(letters.length/3); 
int max=letters.length; 
Random rnd=new Random(1000); 
String colorEx[]= new String[]{"00","00","00"}; 
int colorChange=0; 
int addColorChange=1; 

private String getRandomColor() { 
    StringBuilder color = new StringBuilder("#"); 
    int highColor=rnd.nextInt(2)+1; 
    for (int i = 0; i<3; i++) { 
     int addColor=0; 
     if (i==highColor) 
      highColor=min; 

     color.append(colorEx[i]); 

     if (colorChange==i) { 
      if (colorEx[i].equals("00")) 
       colorEx[i]="55"; 
      else if (colorEx[i].equals("55")) 
       colorEx[i]="AA"; 
      else if (colorEx[i].equals("AA")) 
       colorEx[i]="FF"; 
      else { 
       if (i>0 && !"00".equals(colorEx[i-1])) 
        colorEx[i-1]="00"; 
       else if (i<2) 
        colorEx[i+1]="00"; 
       colorChange+=addColorChange; 
       //colorChange++; 
       if (colorChange>2 || colorChange<0) { 
        //colorChange=0; 
        addColorChange=-addColorChange; 
        colorChange+=addColorChange; 
        colorChange+=addColorChange; 
       } 
      } 
     } 
    } 
    return color.toString(); 
} 
0

Uso Math.sin() (colores adaptables a TotalItems a tomar color):

double rFactor=0; 
double gFactor=0.5; 
double bFactor=1; 
double rAdd=0.1; 
double gAdd=0.2; 
double bAdd=0.3; 
String lettersLight[] = "6789ABCDEF".split(""); 
String lettersDark[] = "".split(""); 
int halfLetters=lettersDark.length/2; 

private void initRandomColor2(int totalItems) { 
    double rFactor=0; 
    double gFactor=(Math.PI/totalItems)*2; 
    double bFactor=(Math.PI/totalItems)*4; 
    rAdd=(Math.PI/totalItems)+(Math.PI/totalItems); 
    gAdd=(Math.PI/totalItems)+(Math.PI/totalItems)*2; 
    bAdd=(Math.PI/totalItems)+(Math.PI/totalItems)*4; 
} 
private String getRandomColor2(boolean light) { 
    int r=(int)(halfLetters+(Math.sin(rFactor)*(halfLetters-1))); 
    int g=(int)(halfLetters+(Math.sin(gFactor)*(halfLetters-1))); 
    int b=(int)(halfLetters+(Math.sin(bFactor)*(halfLetters-1))); 
    rFactor+=rAdd; 
    gFactor+=gAdd; 
    bFactor+=bAdd; 
    return (light 
      ?lettersLight[r]+lettersLight[r]+lettersLight[g]+lettersLight[g]+lettersLight[b]+lettersLight[b] 
      :lettersDark[r]+lettersDark[r]+lettersDark[g]+lettersDark[g]+lettersDark[b]+lettersDark[b] 
      ); 
} 
1

Puede intentar esto . Como esto funciona para mí:

Random random = new Random(); 
int nextInt = random.nextInt(256*256*256); 
System.out.println(String.format("#%06x", nextInt)); 
+0

La pregunta fue respondida hace 5 años, así que creo que ya no ayudará al registrador ... Y explique su respuesta, copiar pasta nunca es una solución, queremos entender el problema y la solución, si no, necesitaremos vuelva a Stackoverflow para publicar la misma pregunta aplicada en un problema diferente. – NatNgs

Cuestiones relacionadas