[Java] 纯文本查看 复制代码
import java.util.Arrays;
public final class Main {
public static void main(final String[] args) {
Main.traverse(new Character[] { 'A', 'B', 'C', 'D', 'E' }, 0, chars -> {
// 第三位不能为 D
if (chars[2].equals('D')) {
return;
}
// C 跟 E 不能相邻
if (Math.abs(Main.indexOf(chars, 'C') - Main.indexOf(chars, 'E')) == 1) {
return;
}
// 输出结果
System.out.println(Arrays.toString(chars));
});
}
/**
* 遍历几个元素的所有可能的组合
*
* @param array 元素列表
* @param index 请传 0
* @param out 结果输出的接口
*/
public static <T> void traverse(final T[] array, final int index, final TraverseOut<T> out) {
if (index == array.length - 1) {
out.invoke(array);
} else {
for (int index2 = index; index2 < array.length; index2++) {
Main.swap(array, index, index2);
Main.traverse(array, index + 1, out);
Main.swap(array, index, index2);
}
}
}
/**
* 交换数组中的两个元素
*
* @param array 数组
* @param index1 元素 1 的位置
* @param index2 元素 2 的位置
*/
public static <T> void swap(final T[] array, final int index1, final int index2) {
final T t = array[index1];
array[index1] = array[index2];
array[index2] = t;
}
/**
* 在数组中搜索指定元素
*
* @param array 数组
* @param key 目标元素
* @return 元素所在的位置,如果未找到则返回 -1
*/
public static <T> int indexOf(final T[] array, final T key) {
for (int i = 0; i < array.length; i++) {
if (array == key) {
return i;
}
}
return -1;
}
/**
* 遍历结果输出的接口
*
* @author cat73
*/
@FunctionalInterface
public static interface TraverseOut<T> {
void invoke(T[] t);
}
}
[Java] 纯文本查看 复制代码
import java.util.Random;
public class Test2 {
public static void main(String[] args) {
char[] arr = {'A','B','C','D','E'};
int count = 0;
while(count < 5 * 5 * 5 * 5 * 5 * 5){//产生的是一个六个字符组成的字符串,如果需要产生五个字符组成的可以更改判断条件->5 * 5 * 5 * 5 * 5,j < 6 --> j < 5
String s = "";
for(int j = 0;j < 6;j ++){
Random r = new Random();
int i = r.nextInt(5);
s = s + arr;
}
if(s.charAt(2) != 'D' && s.indexOf("CE") == -1 && s.indexOf("EC") == -1){
count++;
System.out.println(s);
}
}
}
}