目标:随机生成9位字符的字符串,前3位为小写字母,中间3位为数字,最后3位为大写字母。
思路:
我们知道,在Java里面能随机的只有数字,而为了能随机字母,所以我们要把字母和数字搭上关系。这很容易就会想到ASCII码,所以我们找出小写字母ASCII的范围,然后随机数字,再将数字通过ASCII码表转化为对应的字母,Let‘s do it!
首先我们来看看ASCII与数字之间的转换,首先char word;char变量可以储存单个的字符,而我们所需要用到的大小写字母和数字刚好可以储存,求多码爹(日语),整数不是应该用int来储存么?不完全是,就像字符串也可以储存数字一样,只是我们把它当成char而已,下面我们来试试:
1 public class Demo{ 2 public static void main(String[] args){ 3 char word =‘a‘; 4 System.out.println(word); 5 System.out.println((int)word); //强制转换,在变量前加上强制转换的类型 6 } 7 }
运行结果:
a
97
从运行的结果可以看到‘a‘在进行强制转换后就变成了97,同理可得98对应的是‘b‘…………
同样数字也可以作为字符放进char类型变量里面,来试试:
1 public class Demo{ 2 public static void main(String[] args){ 3 char word =‘0‘; 4 System.out.println(word); 5 System.out.println((int)word); 6 } 7 }
运行结果:
0 48
‘0‘在ASCII码表里面就是48,下面来解决问题:
1 import java.util.Random; //导入Random类 2 3 public class RandomWords { 4 public static void main(String[] args) { 5 char[] words = new char[9]; //建立words数组,并初始化 6 Random random = new Random(); //实例化一个Random对象 7 8 for (int i = 0; i < 9; i++) { 9 if (i < 3) { 10 words[i] = (char) (random.nextInt(26) + (int)‘a‘); 11 } else if (i > 5) { 12 words[i] = (char) (random.nextInt(26) + (int)‘A‘); 13 } else { 14 words[i] = (char) (random.nextInt(10)+(int)‘0‘); 15 } 16 System.out.print(words[i]); 17 } 18 } 19 }
问题解决,首先说
random.nextInt(26)
Random的nextInt(26)的作用是在0-25之间随机一个数。
(int)‘a‘
作用是将‘a‘强制转换为int,也就是65,然后加上0-25之间的随机数,也就得到了26个小写字母对应的ASCII码
(char) (random.nextInt(26) + (int)‘a‘)
再将ASCII码转换成char,然后给words[]赋值,最后输出。
最后我将代码进行了优化,写了一个RandomChar类,输入起始字符和范围就会自动返回一个随机的字符:
import java.util.Random; class RandomChar { char getRandom(char startChar, int range) { //输入起始字符startChar,输入范围range Random random = new Random(); return (char) (random.nextInt(range) + (int) startChar); }
最终的代码就是这样:
1 public class RandomWords { 2 public static void main(String[] args) { 3 char[] words = new char[9]; 4 RandomChar randomChar = new RandomChar(); 5 6 for (int i = 0; i < 9; i++) { 7 if (i < 3) { 8 words[i] = randomChar.getRandom(‘a‘, 26); 9 } 10 else if (i > 5) { 11 words[i] = randomChar.getRandom(‘A‘, 26); 12 } else { 13 words[i] = randomChar.getRandom(‘0‘, 10); 14 } 15 System.out.print(words[i]); 16 } 17 } 18 }
Tip:很多强制转换
原文:http://www.cnblogs.com/srun/p/3652682.html