赞
踩
作者学习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,也就是没有出现过的随机数。由此可以实现去除重复值。
这只是本人的一个简单想法,或许有许多不足的地方,还望大家批评改正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。