我想随机生成10个数字(0或1),这意味着结果看起来像(例如)0 0 1 0 1 1 1 0 1 0; 我的问题是如何解决以下情况:
我希望1的百分比为70%,这意味着我将拥有数字1的7倍和0的3倍
例如: 我们假设0表示错误响应而1表示真实响应,如果我有100个响应,则具有真实响应的百分比为X%,具有错误响应的百分比为Y%,因此我想生成这样的数字,根据我想要的百分比,有一段时间我需要真实的反应应该是= 80%,假的一个= 20%,例如,其他时间我需要错误的反应= 40%和真实的反应= 60%.. ..
答案 0 :(得分:3)
你实际上是通过在一个更大的范围内生成一个随机数,比如最多100个 - 然后选择一个超出该范围的数字来给出你的百分比。
所以:
int num;
Random rand = new Random();
int result = rand.nextInt(100);
if(result<70) {
//70% chance this would happen
num = 1;
}
else {
//30% chance this would happen
num = 0;
}
......等等。如果你需要一个基于这些概率的数字集,你只需要单独定义它并在上面的if语句中初始化它(这将取决于随机数的结果。)
但是,如果您想要相同数量的数字但只是以不同的顺序,那么只需创建一个包含这些数字的数组并将其随机播放。
答案 1 :(得分:3)
使用if语句或? :
运算符。
Random rand = new Random();
double chance = 0.25; // Edit to your liking.
int nextbit = (rand.nextDouble() > chance) ? 1 : 0;
答案 2 :(得分:1)
您需要随机分配到数组中的位置。前3个赋值为0,其余7个赋值为1.我不太熟悉Java所以伪代码...
arr = new int array(10);
set all arr to -1; // set all to -1 so we know which have not been set
int candidate = rand(10); // first candidate will be unset so will get a '0'
for loop = 1 to 10 {
while (arr[candidate]!=-1){ // random candidate until we find an unset position
candidate = rand(10);
}
arr[candidate] = (loop <= 3) ? 0 : 1; // set first 3 to '0' and rest to '1'
}
答案 3 :(得分:1)
我不知道这是否是常用练习,但我在书中看到了以下方法:
定义一个随机int,取值介于1&lt; = i&lt; = 10之间,之后您可以进行如下切换:
Random random = new Random();
int count = random.nextInt( 10 ) + 1;
int myNumber; //my random number that will have values 0 or 1
switch ( count )
{
case 1:
case 2:
case 3:
myNumber = 1;
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
myNumber = 0;
break;
}
因此,myNumber在30%的案例中有1分,在70%的案例中有0分。
答案 4 :(得分:0)
int percentage = 7;
List l = new ArrayList();
for(int i=0;i<10;i++){
if(i<percentage){
list.add(1);
} else {
list.add(0);
}
}
Collections.shuffle(list);
现在你的确有7倍于0的1倍和3倍。
答案 5 :(得分:0)
如果你想要7个1和3个零,那么创建一个包含7个和3个零的列表/数组,然后将列表/数组洗牌。