生成随机数

时间:2011-11-25 15:33:14

标签: java random

我想随机生成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%.. ..

6 个答案:

答案 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个零的列表/数组,然后将列表/数组洗牌。