1. 程式人生 > >Java中隨機生成大寫字母的方法

Java中隨機生成大寫字母的方法

     作者學習Java時間不長,對Java還不是很瞭解,網上搜索並沒有發現Java提供隨機生成字母的方法,有網友通過定義一個包含所有字母的辦法進行隨機字母生成,但這樣很費時間。想到通過ASCII表的辦法,實現數字與字母的轉化,程式碼如下

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//匯入需要的依賴包
public class Test {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("請輸入隨機生成大寫字母的個數");
		int a=input.nextInt();     //接收需要生成字母數量的值
		while(a>26 || a<1){        //為了防止重複,所以設定區間為1-26
			System.out.println("輸入區間有誤,重新輸入");
			a=input.nextInt();
		}
		
		int[] arr=new int[a];              //定義一個整型陣列,陣列長度為輸入值
		boolean[] flag=new boolean[26];    //定義一個Boolean型陣列,用來除去重複值
		for(int i=0;i<arr.length;i++){     //通過迴圈為陣列賦值
			Random rand=new Random();
			int index;
			do{
				index=rand.nextInt(26);    //隨機生成0-25的數字並賦值給index
			}while(flag[index]);    //判斷flag值是否為true,如果為true則重新為index賦值
			arr[i]=index+65;        //大寫字母的ASCII值為65-90,所以給index的值加上65,使其符合大寫字母的ASCII值區間
			flag[index]=true;       //讓對應的flag值為true
		}
		Arrays.sort(arr);//按升序排列陣列
		for(int n=0;n<arr.length;n++){
			System.out.print((char)(arr[n])+"\t");//遍歷陣列並且將其轉為char型
		}
		
	}
}

          程式執行結果如上圖

      這使用了int型轉為char型的想法,首先取值65-90,因為這是ASCII表中大寫字母對應的數值,然後將取值轉為大寫字母,實現隨機生成字母。

     但由於字母只有26個,為了防止重複,只能設定區間為1-26。定義的boolean型陣列預設值為false,首次生成數字後,對應boolean陣列的下標為false,可以通過迴圈,通過後將其值改為true。假如以後再次生成相同的隨機數,則不能通過迴圈,併為其再次賦值,直到其值為flase,也就是沒有出現過的隨機數。由此可以實現去除重複值。

    這只是本人的一個簡單想法,或許有許多不足的地方,還望大家批評改正。