在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ java產(chǎn)生隨機(jī)驗(yàn)證碼,有惑

java產(chǎn)生隨機(jī)驗(yàn)證碼,有惑

import java.util.Arrays;
import java.util.Random;

public class VerificationCode {
    public static void main(String[] args) {
        String[] CHARS = { "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L",
                "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y" };
        boolean[] charFlags = new boolean[CHARS.length];
        String[] verifyCodes = new String[6];

        Random ran = new Random();
        for (int i = 0; i < verifyCodes.length; i++) {
            int index;
            do {
                index = ran.nextInt(CHARS.length);
            } while (charFlags[index]);
            verifyCodes[i] = CHARS[index];
            charFlags[index] = true;
        }
        //這段代碼求解釋   看不懂

        System.out.print("驗(yàn)證碼為:");
        for (int i = 0; i < verifyCodes.length; i++) {
            System.out.print(verifyCodes[i]);
        }
    }
}

回答
編輯回答
愛礙唉

具體是哪一行看不懂呢?
這個(gè)就是聲明了一個(gè)驗(yàn)證碼可取值數(shù)組CHARS
charFlags 的每個(gè)值對(duì)應(yīng)了每個(gè)char是否已經(jīng)用到過。(這里的目的是生成的驗(yàn)證碼不會(huì)出現(xiàn)重復(fù)字符比如AA1234,兩個(gè)A重復(fù)了)
verifyCodes是最終生成的驗(yàn)證碼數(shù)組。
代碼邏輯翻譯過來就是:
每次從CHARS里面取一個(gè)字符,看這個(gè)字符是否已經(jīng)用過,沒有用過就放到最終的驗(yàn)證碼數(shù)組verifyCodes中。然后取下一個(gè),如果從CHARS中取出的字符已經(jīng)用過,則再隨機(jī)生成一個(gè)下標(biāo),重新取一個(gè)字符。直到取到6個(gè)不重復(fù)的字符為止。

2017年10月23日 16:38
編輯回答
淺時(shí)光

搞雙重循環(huán)是很低效的一個(gè)事, 如果驗(yàn)證碼再長點(diǎn), 某一位可能會(huì)長時(shí)間不出現(xiàn), 不知作者為什么這么做? 為了更好的隨機(jī)性? 原代碼的核心是避免同一個(gè)字符重復(fù)出現(xiàn)

改成這樣就會(huì)好理解:

import java.util.Arrays;
import java.util.Random;

public class VerificationCode {
    public static void main(String[] args) {
        char[] CHARS = { '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L',
                'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y' };
        char[] verifyCodes = new char[6];

        Random ran = new Random();
        for (int i = 0; i < verifyCodes.length; i++) {
            verifyCodes[i] = CHARS[ran.nextInt(CHARS.length)];
        }

        System.out.print("驗(yàn)證碼為:");
        System.out.print(new String(verifyCodes));
    }
}
2017年10月16日 14:48