【发布时间】:2023-03-29 13:30:02
【问题描述】:
我正在尝试创建一个算法,该算法可以生成一个带有随机布尔值的布尔数组,假设恰好“x”个布尔值是真实的。我已经解决了算法,但很好奇是否有更清洁的方法。
以下是我的工作示例。两个变量songToPlay 和songsToDownload 是随机生成的变量,但在这种情况下,我将它们分别设置为固定数字8 和4。另一个需要提的重点是数组中的第一个布尔值必须为真。
问题:我需要随机生成一个由 8 个真假值组成的数组,正好是 4 个 的值是真实的。
Random ran = new Random();
int songsToPlay = 8;
int songsToDl = 4
Boolean[] ranDownloads = new Boolean[songsToPlay];
ranDownloads[0] = true;
int counter = 1; //track how many are true, given the first one is always true.
for(int i = 1; i < ranDownloads.length; i++) {
if((songsToDl - counter) >= (ranDownloads.length - i)) {
ranDownloads[i] = true;
counter++;
} else {
if(counter == songsToDl) {
while (i < ranDownloads.length) {
ranDownloads[i++] = false;
}
break;
} else {
ranDownloads[i] = ran.nextBoolean();
if(ranDownloads[i] == true) {
counter++;
}
}
}
}
【问题讨论】:
标签: java arrays algorithm random boolean