1. 程式人生 > 實用技巧 >0到9生成4個8位數的字串

0到9生成4個8位數的字串

  分享一個面試題,哎,用自己的方法寫了我好久才寫出來,查了一下資料記個筆記。。。

public static void main(String[] args) {

        //題目:0到9這幾個數字生成4個不相同的8位數的字串,例如12345678,12345687,12345786,123456768  注意,每一個字串中的數字也是不能重複的
        //錯誤分析:我原來的思路是首先我們要想辦法獲取一個八位數的字串,只要這個能成功弄出來,我們迴圈四次然後丟到HashSet中就搞定了
        //所以我就想著弄一個List存放0到9,然後迴圈8次,每次都獲取一個隨機數m,然後將隨機數m%list.size()得到索引下標,根據下標獲取這個數之後然後
        
//在List中將這個數remove掉,那麼下次從集合中獲取一個數字的時候就不會重複了,只是這種方式賊雞兒麻煩。。。我也是醉了 //正確分析:經過我查了一些資料,其中我們的目標是得到8個不重複的數字而已,那麼直接用一個HashSet當容器,接收隨機數10*Math.random(), //當set中的數量到達8個就滿足條件了呀 Set<String> result = new HashSet<>(); while (result.size() < 4) { result.add(getNoRepectStr()); } System.out.println(
"生成的四個字串為:" + result); } //獲取一個8位不重複的字串,注意我們獲取隨機數有兩種方式,一種是Math.random()生成一個「0,1)之間的數,那麼生成0到9,只需要乘以10就行了 // 另一種是Random random = new Random();random.nextInt(10),也是生成0到9 //我個人推薦的話直接使用第一種吧,不需要new物件,寫起來比較方便 public static String getNoRepectStr() { StringBuilder sb = new StringBuilder(); Set
<Integer> set = new HashSet<>(); while (set.size() < 8) { //0到9隨機數 int ran = (int) (10 * Math.random()); set.add(ran); } //將set中的數字拼接成字串然後返回 //這裡有個很有意思的東西,set中的元素是從小到達排序好了的,例如往set中依次放入1,3,2,你列印的話會是1,2,3, // 不是說好的set中的元素是無序的麼?有興趣可以查查資料為啥叻? for (Integer num : set) { sb.append(num); } return sb.toString(); }