隨機生成前N個不重複的整數

package cn.ds;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

/**
 * 測試隨機生成前N個不重複的整數
 * @author Administrator
 *
 */
public class TestRandom {
	public static void main(String[] args) {
		randomNumber2File("e:/random.txt");
	}
	
	/**
	 * 根據提供的路徑生成相應的隨機數
	 * @param path
	 */
	public static void randomNumber2File(String path){
		File file = new File(path);
		OutputStream os = null;
		try {
			os = new BufferedOutputStream(new FileOutputStream(file));
			byte[] buf = new byte[20];
			for(int j = 0; j < 100; j++){
				int[] arr = ranInt(9);
				StringBuffer sb = new StringBuffer();
				for(int i = 0; i < arr.length; i++){
					sb.append(arr[i]);
				}
				sb.append("\r\n");
				buf = sb.toString().getBytes();
				os.write(buf);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(null != os){
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	 * 利用隨機生成數組的索引實現隨機,並通過交換實現不重複
	 * @param n
	 * @return
	 */
	public static int[] ranInt(int n) {
		int[] arr = new int[n];
		int i,randomIndex,temp;
		for(i = 0; i < n; i++){
			arr[i] = i+1;
		}
		for(i = 1; i < n; i++){
			randomIndex = ranIndex(0, i);
			//交換當前元素和生成的隨機元素
			temp = arr[i];
			arr[i] = arr[randomIndex];
			arr[randomIndex] = temp;
		}
		return arr;
	}
	
	public static int ranIndex(int start, int end){
		Random r = new Random();
		int result;
		result = r.nextInt(end);
		return result;	
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章