第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java隨機(jī)化字符串

Java隨機(jī)化字符串

素胚勾勒不出你 2022-07-27 19:51:44
我試圖在不使用任何 Random() 函數(shù)的情況下生成無意義的單詞。我發(fā)現(xiàn)我可以使用當(dāng)前時(shí)鐘或鼠標(biāo)坐標(biāo)。我選擇使用當(dāng)前時(shí)鐘。這是我寫的代碼。private final char[] charray = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};private char getRandomCharacter(){    return charray[random(charray.length)];}private int random(int value){    value =(int) System.nanoTime()% 52;    return value;}protected Randomizer(){    boolean running = true;    int count = 0;    int max = 5;    while(running){        StringBuilder sb = new StringBuilder();        int size = random(25) + random(25);        for (int i = 0; i < size; i++) {            sb.append(getRandomCharacter());        }        System.out.println("Random Line : " + sb.toString());        if (count++ == max) {            running = false;            System.out.println("All of them are random.");        }    }}public static void main(String[] args) {    new Randomizer();}我期待這樣的輸出:axdlMkjiIfjcmqQopv 等。但我得到這樣的東西:ZNNrrrUUUUxxxxbbbhhhLLLLoooRRRRRRvvvYYYYBBBBfffI 或 JmmmPPKKKKnnnnRRBeeHHHHlllllOOOOrrrVVVVV為什么連續(xù)的太多了。nanoTime太慢了還是什么?我在此之前使用了 currentTimeMillis,但情況更糟。我想不通,也找不到任何關(guān)于如何隨機(jī)使用當(dāng)前時(shí)鐘的來源。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

charray通過定義asCharacter[] charray并使其成為列表,您可以獲得更好的結(jié)果: 在方法List<Character> chars = Arrays.asList(charray);

中使用此列表:getRandomCharacter()


 private char getRandomCharacter(){

     Collections.shuffle(chars); // shuffle before each use 

     return chars.get(random(chars.size()));

 }

當(dāng)然修復(fù)random:


private int random(int value){

    return (int) System.nanoTime()% value;

}

輸出:


隨機(jī)行:tjnbuxtdetulhflqnejbrblxfqqikuyyrrezzwpwpwg

隨機(jī)行:mzpzjboycaqrarpsqpsqpsk 隨機(jī)

行:cezkcsnhtmovmt隨機(jī)行:


查看完整回答
反對(duì) 回復(fù) 2022-07-27
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

可以使用時(shí)序數(shù)據(jù)(除了其他數(shù)據(jù))來播種隨機(jī)數(shù)生成器,但使用時(shí)序數(shù)據(jù)來實(shí)現(xiàn)隨機(jī)性并不容易。這是可能的,但可能非常慢。例如,請(qǐng)參閱我在此處編寫的關(guān)于如何使用其他數(shù)據(jù)為安全隨機(jī)實(shí)例播種的代碼(H2 數(shù)據(jù)庫,MathUtils.generateAlternativeSeed)。它用:

  • System.currentTimeMillis()

  • System.nanoTime()

  • 新對(duì)象().hashCode()

  • Runtime.freeMemory()、maxMemory()、totalMemory()

  • System.getProperties().toString()

  • 網(wǎng)絡(luò)地址

  • 更多計(jì)時(shí)數(shù)據(jù)

這是為了播種一個(gè)安全的偽隨機(jī)數(shù)生成器。這可以確保即使在沒有任何其他運(yùn)行、不知道當(dāng)前時(shí)間并且沒有 UI 的系統(tǒng)上也能獲得足夠的熵。

但是,如您所見,依賴時(shí)序數(shù)據(jù)是困難的,因?yàn)樗Q于操作系統(tǒng)、方法調(diào)用之間的時(shí)間、編譯器和硬件。


查看完整回答
反對(duì) 回復(fù) 2022-07-27
?
HUH函數(shù)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊

僅使用時(shí)間是有問題的,因?yàn)樗拗屏四梢砸箅S機(jī)數(shù)的頻率,并且還非常依賴于實(shí)現(xiàn)。


更好的方法是將時(shí)間用作種子,然后使用偽隨機(jī)生成器,例如線性同余生成器。您在此答案中有更多信息。考慮到這種隨機(jī)數(shù)生成器算法并不安全,并且正如 Thomas 指出的那樣,如果您希望在所有系統(tǒng)中都使用安全的 RNG,那么僅使用時(shí)間作為種子可能還不夠。


因此,您的代碼可能如下所示:


    private final char[] charray = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',

        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};


private long seed;


private char getRandomCharacter() {

    return charray[random(charray.length)];

}


private int random(int value) {

    seed = (1103515245L * seed + 12345L) % 2147483648L;

    return (int)seed%value;

}


protected Randomizer() {

    boolean running = true;

    int count = 0;

    int max = 5;

    seed = System.nanoTime();

    while (running) {

        StringBuilder sb = new StringBuilder();

        int size = random(25) + random(25);

        for (int i = 0; i < size; i++) {

            sb.append(getRandomCharacter());

        }

        System.out.println("Random Line : " + sb.toString());


        if (count++ == max) {

            running = false;

            System.out.println("All of them are random.");

        }

    }

}


public static void main(String[] args) {

    new Randomizer();

}


查看完整回答
反對(duì) 回復(fù) 2022-07-27
  • 3 回答
  • 0 關(guān)注
  • 165 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)