• 生成不重复的随机数


    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;
    	}
    
    
    }
  • 相关阅读:
    如何调试PHP程序
    Win10系统80端口被pid=4的System进程占用 -- 解决方法
    初用DataGrip,连接后看不到自己创建的数据库的问题
    AJAX实现跨域的三种方法
    Webstrom (或Phpstrom)使用git(oschina-码云)
    EXCEL 数字+E+数字 自动识别为指数形式的解决办法
    解决安装office2013时提示已安装相同版本的office
    将excel导入mysql(使用navicat)
    mysql按汉语拼音首字母排序
    SQL查询语句去除重复行
  • 原文地址:https://www.cnblogs.com/icenter/p/1988500.html
Copyright © 2020-2023  润新知