》题目要求:
》》产生26个大写字母
》》产生26个小写字母
》》产生0-9这10个阿拉伯数字
》程序实现:
1 package cn.fury.test; 2 3 4 public class Test{ 5 public static void main(String[] args) { 6 System.out.println((int)'a' + " " + (int)'z' + " " + (int)'A' + " " + (int)'Z'); 7 for(char i = 'a'; i <= 'z'; i++){ 8 System.out.print("\'" + i + "\'" + ","); 9 } 10 System.out.println(); 11 for(char i = 'A'; i <= 'Z'; i++){ 12 System.out.print("\'" + i + "\'" + ","); 13 } 14 System.out.println(); 15 for(char i = '0'; i <= '9'; i++){ 16 System.out.print("\'" + i + "\'" + ","); 17 } 18 System.out.println(); 19 char [] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n', 20 'o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D', 21 'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T', 22 'U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'}; 23 System.out.println(alphabet.length); 24 } 25 }
》程序改进
》》怎么将产生的这些字符都放到一个字符数组里面
》》notice:该程序员有点懒,持续更新中......
》 改进方案
定义一个空数组,一个一个的将字符放到里面去;先对数组进行扩容,再将字符放到里面去
数组扩容:Arrays.copyOf(需要扩容的数组, 扩容长度) -->> 返回的是一个数组
》 改进程序
1 package atest.dak.com; 2 3 import java.util.Arrays; 4 5 public class Test{ 6 public static void main(String[] args) { 7 char[] letters = create_alphabet(); 8 System.out.println(Arrays.toString(letters)); 9 } 10 11 /** 12 * 产生全部大写字母和全部小写字母还有0到9的阿拉伯数字 13 * @return TODO 14 * 15 */ 16 private static char[] create_alphabet() { 17 char x = 'a'; 18 char y = 'A'; 19 char z = '0'; 20 char [] alphabet = {}; //用于存放字符 21 for(int i = 0; i < 26; i++) { //将26个小写字母放到alphabet数组中去 22 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); //扩容处理 23 alphabet[alphabet.length - 1] = (char)(x + i); //添加元素 24 } 25 for(int i = 0; i < 26; i++) { //将26个大写字母放到alphabet数组中去 26 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); 27 alphabet[alphabet.length - 1] = (char)(y + i); 28 } 29 for(int i = 0; i <= 9; i++) { //将10个阿拉伯数字放到alphabet中去 30 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); 31 alphabet[alphabet.length - 1] = (char)(z + i); 32 } 33 // System.out.println(Arrays.toString(alphabet)); 34 return alphabet; 35 } 36 37 }
》 程序改进
》》 提醒用户输入一个整型数字,控制台返回指定个数的字母和阿拉伯数字,要求不重复
》 改进方案
》》 通过产生随机数来确定存放字母和阿拉伯数字的char数组的索引,再通过同该数组长度一样的一个boolean数组来存放每个元素是否选中的状态,每选中一个元素后就将这个元素的状态变成选中状态,从而防止再次选中
》 改进程序
1 package atest.dak.com; 2 3 import java.util.Arrays; 4 import java.util.Random; 5 import java.util.Scanner; 6 7 public class Test{ 8 public static void main(String[] args) { 9 Scanner scan = new Scanner(System.in); 10 System.out.print("请输入需要产生的验证码的数量:"); 11 int number = scan.nextInt(); 12 char [] ran_verification_code = create_verification_code(number); 13 System.out.println("随机产生的" + number + "个验证码为: " + Arrays.toString(ran_verification_code)); 14 } 15 16 /** 17 * 随机产生指定数量的验证码 18 * @param number TODO 19 * @return TODO 20 * 21 */ 22 private static char[] create_verification_code(int number) { 23 char[] letter = create_alphabet(); //存放所有的字母 24 boolean [] judge = new boolean[letter.length]; //存放所有字母是否被选中的状态 25 char[] ran_num = {}; //存放随机产生的验证码 26 int index = 0; 27 Random random = new Random(); 28 for(int i = 0; i < number; i++) { 29 do { 30 index = random.nextInt(letter.length); 31 } while(judge[index]); 32 judge[index] = true; //没选中一个字母,就将这个字母的状态变成选中 33 ran_num = Arrays.copyOf(ran_num, ran_num.length + 1); //扩容处理 34 ran_num[ran_num.length - 1] = letter[index]; //添加元素 35 } 36 // System.out.println(Arrays.toString(ran_num)); 37 return ran_num; 38 } 39 40 /** 41 * 产生全部大写字母和全部小写字母还有0到9的阿拉伯数字 42 * @return TODO 43 * 44 */ 45 private static char[] create_alphabet() { 46 char x = 'a'; 47 char y = 'A'; 48 char z = '0'; 49 char [] alphabet = {}; //用于存放字符 50 for(int i = 0; i < 26; i++) { //将26个小写字母放到alphabet数组中去 51 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); //扩容处理 52 alphabet[alphabet.length - 1] = (char)(x + i); //添加元素 53 } 54 for(int i = 0; i < 26; i++) { //将26个大写字母放到alphabet数组中去 55 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); 56 alphabet[alphabet.length - 1] = (char)(y + i); 57 } 58 for(int i = 0; i <= 9; i++) { //将10个阿拉伯数字放到alphabet中去 59 alphabet = Arrays.copyOf(alphabet, alphabet.length + 1); 60 alphabet[alphabet.length - 1] = (char)(z + i); 61 } 62 // System.out.println(Arrays.toString(alphabet)); 63 return alphabet; 64 } 65 66 }
》 程序改进
》》 提醒用户输入验证码,判断用户是否输入正确;如果输入错误返回正确的个数(位置和内容都正确才算正确)
》》 待改进中......2017年3月1日10:48:28