打印出所有5个字符的可能组合

根据以下条件写一段代码,打印出所有5个字符的可能组合:
1. 至少有一个大写字母
2. 至少有一个小写字母
3. 至少有一个数字
4.两个一样的数或者字母不能连在一起(比如 Haxa5是可以的,Haax5就不可以)


public static void print(){
String upper[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
String lower[] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String num[] = {"0","1","2","3","4","5","6","7","8","9"};

String all[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"0","1","2","3","4","5","6","7","8","9"};
String result = "";
for(int i=0;i<upper.length;i++){
for(int j=0;j<lower.length;j++){
for(int m=0;m<num.length;m++){
for(int n=0;n<all.length;n++){
for(int k=0;k<all.length;k++){
result+=upper[i]+lower[j]+num[m]+all[n]+all[k];
randomGroup(result);
result="";
}
}
}
}
}

}

public static void main(String[] args) {
print();
}

/**
* 给五个字符的字符串的随机组合
*
*/
public static void randomGroup(String fiveChar){
char c[]=fiveChar.toCharArray();
println(c);
allCombString(c,0);
}

/**
* 相邻字母是否相同
* @param c
* @return
*/
private static boolean isSameLetter(char c[]){
for(int i=0;i<c.length-1;i++){
if(c[i] == c[i+1]){
return false;
}
}
return true;
}

public static void allCombString(char[] c, int s) {
int l = c.length;
if (l - s == 2) {
char temp = c[l - 1];
c[l - 1] = c[l - 2];
c[l - 2] = temp;
println(c);
} else {
for (int i = s; i < l; i++) {
moveToHead(c, i, s);
char ct[] = new char[l];
System.arraycopy(c, 0, ct, 0, l);// 保持其他元素位置不变
allCombString(ct, s + 1);
}
}
}

public static void moveToHead(char[] c, int id, int s) {
if (id > s && id < c.length) {
char temp = c[id];
for (int i = id; i > s; i--) {
c[i] = c[i - 1];
}
c[s] = temp;
println(c);
}
}

public static void println(char[] c) {
if(isSameLetter(c)){//相邻字符不一样
System.out.print(new String(c)+"、");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值