15

Java Webアプリに、ランダムな16進値を生成する必要があるシナリオがあります。この値は、私が指定した値の範囲内にある必要があります。(値の範囲は16進値または整数値にすることができます)。

これを行う最も効率的な方法は何ですか>乱数を生成してから16進数に変換する必要がありますか?または、値を直接生成できますか?

4

6 に答える 6

24

はい、範囲内の10進値を生成するだけです。次のようなもの:

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

16進数と10進数は、Javaでは(整数として)同じように処理され、表示または入力が異なるだけです。(詳細については。)

于 2012-06-19T05:25:53.493 に答える
4

これを試して、

String s = String.format("%x",(int)(Math.random()*100));
System.out.println(s);
于 2012-06-19T05:47:36.667 に答える
1
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());
于 2013-11-21T14:44:57.013 に答える
1

あなたはこれを試すことができます。これは私のために働くので:

Random random = new Random();
int nextInt = random.nextInt(256*256*256);
System.out.println(String.format("#%06x", nextInt));
于 2018-01-09T14:32:17.607 に答える
0

ランダムプログレッシブヘックスカラー:

String letters[] = "0123456789ABCDEF".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();
}
于 2014-06-17T12:36:57.110 に答える
0

Math.sin()の使用(色付けされるtotalItemsに適応可能な色):

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[] =  "0123456789".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]
            );
}
于 2014-06-17T13:22:44.267 に答える