产生0-9 A-Z a-z

》题目要求:

  》》产生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 }
View Code

》程序改进

  》》怎么将产生的这些字符都放到一个字符数组里面

  》》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 }
View Code

》 程序改进

  》》 提醒用户输入一个整型数字,控制台返回指定个数的字母和阿拉伯数字,要求不重复

》 改进方案

  》》 通过产生随机数来确定存放字母和阿拉伯数字的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 }
View Code

》 程序改进

  》》 提醒用户输入验证码,判断用户是否输入正确;如果输入错误返回正确的个数(位置和内容都正确才算正确)

  》》 待改进中......2017年3月1日10:48:28

 

转载于:https://www.cnblogs.com/NeverCtrl-C/p/6099878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值