Java中隨機生成大寫字母的方法
阿新 • • 發佈:2019-01-24
作者學習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,也就是沒有出現過的隨機數。由此可以實現去除重複值。
這只是本人的一個簡單想法,或許有許多不足的地方,還望大家批評改正。