2012-06-19 48 views
8

Tôi có một kịch bản trong ứng dụng web java, trong đó giá trị thập lục phân ngẫu nhiên phải được tạo. Giá trị này phải nằm trong phạm vi giá trị được chỉ định bởi tôi. (Phạm vi giá trị có thể là giá trị thập lục phân hoặc số nguyên).java- cách tạo giá trị thập lục phân ngẫu nhiên trong phạm vi giá trị được chỉ định

Cách hiệu quả nhất để thực hiện việc này> Tôi có phải tạo số thập phân ngẫu nhiên, sau đó chuyển đổi số thập phân sang thập lục phân không? Hoặc giá trị có thể được tạo trực tiếp không?

+6

'Integer.toHexString (yourRandomNumber)' không đủ? –

Trả lời

13

Có, bạn chỉ cần tạo giá trị thập phân trong phạm vi của mình. Một cái gì đó như:

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 

Số thập phân và thập phân được xử lý theo cùng một cách trong Java (dưới dạng số nguyên), và chỉ được hiển thị hoặc nhập vào khác nhau. (. More info on that)

+0

Đánh bại tôi với nó ... –

+0

Bạn chỉ tạo một số * nhị phân * trong phạm vi của mình ... – EJP

+0

'rand.nextInt (0x10)' sẽ không tạo 0x10, chỉ 0..0xF. Xem [JavaDoc Random] (http://docs.oracle.com/javase/6/docs/api/java/util/Random.html) _Trả lại một pseudorandom, giá trị int phân bố đồng nhất giữa 0 (bao gồm) và giá trị được chỉ định (độc quyền) _ – hgoebl

4

Hãy thử điều này,

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

OP sẽ muốn số hex nằm trong phạm vi. Điều này không làm điều đó, phải không? –

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

ngẫu nhiên tiến hex màu sắc:

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

Sử dụng Math.sin() (màu sắc thích nghi để TotalItems được màu):

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

Bạn có thể thử điều này . Vì điều này phù hợp với tôi:

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

Câu hỏi đã được trả lời 5 năm trước, vì vậy tôi nghĩ rằng nó sẽ không giúp logger nữa ... Và hãy giải thích câu trả lời của bạn, copypaste không bao giờ là giải pháp, chúng tôi muốn hiểu vấn đề và giải pháp, nếu không, chúng tôi sẽ cần đi trên Stackoverflow một lần nữa để gửi cùng một câu hỏi được áp dụng trên một vấn đề khác nhau. – NatNgs

Các vấn đề liên quan