package com.demo.sw.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * * @author Mr.J * */ public class NoRepeatNums { public static void main(String[] args) { int [] arr = getNoRepeatNums(3,1,102); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } } /** * 从 from 到 to 取 n 个部重复的数 * @param n * @param from * @param to * @return */ public static int[] getNoRepeatNums(int n, int from, int to){ int fl = (from+"").length(); int tl = (to+"").length(); //int fmin = tl<fl?tl:fl; int tmax = tl>fl?tl:fl; int f = from<to?from:to; int t = from>to?from:to; if((t-f)<n){ int []rtArr = new int [t-f+1] ; int it = 0; for (int i = f; i <= t; i++) { rtArr[it]= i; it++; } return rtArr; } //int min = Integer.parseInt(appendChar("1",'0',fmin)); int max = Integer.parseInt(appendChar("1",'0',tmax)); int num = -1; Set s = new HashSet(); while(true){ if(null !=s && s.size() >= n){ break; } num = (int)(Math.random()*max); if(f<=num&&num<=t){ if(!s.contains(num)){ s.add(num); } } } int [] arr = new int[n]; Iterator itr = s.iterator(); int i = 0; while(itr.hasNext()){ Integer in = (Integer)itr.next(); arr[i] = in.intValue(); i++; } return arr; } /** * 在字符串 S 后追加 num 个 C 并返回 * @param s * @param c * @param num * @return */ public static String appendChar(String s, char c, int num){ for (int i = 0; i < num; i++) { s+=c; } return s; } /** * 默认方法从 10 中取出 n 个部重复的数,n 必须小于或等于10 否则无法返回null * @param n * @return */ public static int[] getDefaultNoRepeatNums (int n) { if(n>10){ return null; } Set s = new HashSet(); while(true){ if(null !=s && s.size() >= n){ break; } int num = (int)(Math.random()*10); if(!s.contains(num)){ s.add(num); } } int [] arr = new int[n]; Iterator itr = s.iterator(); int i = 0; while(itr.hasNext()){ Integer in = (Integer)itr.next(); arr[i] = in.intValue(); i++; } return arr; } }