分享一個面試題,哎,用自己的方法寫了我好久才寫出來,查了一下資料記個筆記,,,
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(); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77586.html
標籤:Java
