请从26个英文字母中随机取出24个,并随机平均分配给4个人,并将这4个人手中的牌从小到大排列。
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class Test {
public static void main(String[] args) {
// flag 为标记,只有0的可用
int[] flag = new int[26];
Random random = new Random();
// 移除两个,标记为-1,其余24个0时可用的
fill(flag, random.nextInt(26), -1);
fill(flag, random.nextInt(25), -1);
List<List<Character>> list = new LinkedList<>();
System.out.println("原始数据:");
for (int i = 24; i > 0; i -= 6) {
List<Character> item = new LinkedList<>();
for (int j = 0; j < 6; j++) {
// 每个人取6个
int p = fill(flag, random.nextInt(i - j), i / 6);
char c = (char) (p + 'a');
System.out.print(c + " ");
item.add(c);
}
// 将6个记录下来,保存到list中
Collections.sort(item);
list.add(item);
System.out.println();
}
// 给list排序
// 打印list
System.out.println("\n排序后:");
list.forEach(System.out::println);
}
// 将 val 的 第 ind 个可用的0 标记为 v
private static int fill(int[] val, int ind, int v) {
for (int i = 0; i < val.length; i++) {
if (val[i] != 0) {
continue;
}
if (ind == 0) {
val[i] = v;
return i;
}
ind--;
}
return -1;
}
}
几次测试输出:
可以看到是随机分配
import java.util.*;
public class TestMain {
public static void main(String[] args) {
int dx = 65; // 大写字母
int xx = 97; // 小写字母
Set<Character> zms = new HashSet();
Random ra = new Random();
while(true) {
int zm = ra.nextInt(26) + xx; // ra.nextInt(26) + dx
zms.add((char)zm);
if (zms.size() == 24) break; // 够24个就退出
}
Character[] characters = zms.toArray(new Character[0]);
List<List<Character>> persons = new ArrayList<>();
persons.add(new ArrayList<>()); // 第一个
persons.add(new ArrayList<>()); // 第二个
persons.add(new ArrayList<>()); // 第三个
persons.add(new ArrayList<>()); // 第四个
for (int i = 0; i < characters.length; i++) {
int index = ra.nextInt(4); // 给第index个赋值characters的i下标的值
List<Character> person = persons.get(index);
if (person.size() < 6) { // 是否给完
person.add(characters[i]);
}else {
--i;
}
}
// 查看结果
persons.forEach(p->{
p.forEach(e->{
System.out.print(e + "\t");
});
System.out.println();
});
}
}
结果:
ArrayList<Character> chs = new ArrayList<>(26);
char a = 'a';
for (int i = 0; i < 26; i++) {
chs.add(a++);
}
Collections.shuffle(chs);
char[][] distribute = new char[4][6];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 6; j++) {
distribute[i][j] = chs.get(i * 6 + j);
}
Arrays.sort(distribute[i]);
}