要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9) 也不相同,每个字符串长度为10;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * 要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)
 * 也不相同,每个字符串长度为10;
 * 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判断生成的字符串是否包含重复,
 * 在判断长度是不是10,等等.
 * 2.其实这题我们可以培养一个习惯,大问题分解小问题解决.
 * (1).10个字符串,我们先产生一个10个字符不重复的字符串,
 * (2).怎么去重复呢?集合中的HashSet就可以,这题不适合用包含方法做,代码复杂
 * (3).字符组成是由(a-zA-Z0-9) 难道我们在随机他们的码表一一判断吗?-------->可以把们放到一
 * 个容器中ArrayList
 * 在集合的随机索引
 */
public class Demo1 {

    public static void main(String[] args) {
        List<Character> al = new ArrayList<Character>();
        Set<Character> hs = new HashSet<Character>();
        Set<String> hs2 = new HashSet<String>();
        // 把(a-zA-Z0-9)放进集合中
        for (char i = 'a'; i <= 'z'; i++) {
            al.add(i);
        }
        for (char i = 'A'; i <= 'Z'; i++) {
            al.add(i);
        }
        for (char i = '0'; i <= '9'; i++) {
            al.add(i);
        }
        while (true) {
            hs.clear();//内循环走完,把存储字符的set清零
            while (true) {
                int a = (int) (Math.random() * al.size());
                //随机下标拿到字符,把字符放进set中保证了字符是唯一的
                hs.add(al.get(a));
                //当set中有10个数据时,把10个数据打印出来,然后转成字符串存放到另一个set中,跳出循环
                if (hs.size() == 10) {
                    for (char c : hs) {
                        System.out.print(c);
                    }
                    String s = hs.toString();
                    hs2.add(s);
                    break;
                }
            }
            System.out.println();
            //当存放字符串的set有10个数据时,跳出循环
            if (hs2.size() == 10) {
                break;
            }
        }
    }
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页