生成随机数,输出偶数的可能性是偶数的两倍

时间:2017-03-03 19:25:49

标签: java

我想知道是否有办法创建一个在两个整数之间生成数字的随机数生成器,但生成偶数的可能性是奇数的两倍。目前,我还没有想出一种甚至类似或接近2倍的方式。

3 个答案:

答案 0 :(得分:4)

简单但应该有效:

  • 存储随机浮动调用(0.0f - 1.0f)(random.nextFloat()
  • 获取所需范围内的随机整数
  • 如果随机浮点调用小于0.67f,则需要递减或递增随机整数以使其均匀,返回值
  • 否则,如果需要,递减或递增随机整数以使其为奇数,返回值

如果随机整数是所需范围的边界值,请确保向右方向递减或递增。

答案 1 :(得分:1)

有很多方法可以做到这一点。一种是生成两个整数:一个在用户的边界之间,一个在0和2之间(包括0和2)。将第一个数字的最后一位替换为第二个数字的最后一位,得到的结果甚至是奇数的两倍。

你需要注意最后一步的结果是否超出界限的可能性;在那种情况下,你应该从头开始重新画画。

答案 2 :(得分:0)

在评论中实施@SteveKuo的建议:

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Please enter the minimum number that can be generated: ");
    int min = scanner.nextInt();
    System.out.print("Please enter the maximum number that can be generated: ");
    int max = scanner.nextInt();
    int evenOrOdd = 0 + (int)(Math.random() * ((2 - 0) + 1));
    int random = 0;
    if(evenOrOdd == 2) { // generate random odd number
      if(max % 2 == 0) { --max; }
      if(min % 2 == 0) { ++min; }
      random = min + 2*(int)(Math.random() * ((max - min)/2+1));
    } else { //get random number between [(min+1)/2, max/2] and multiply by 2 to get random even number between min and max
      random = ((min+1)/2 + (int)(Math.random() * ((max/2 - (min+1)/2) + 1))) * 2;
    }
    System.out.printf("The generated random number is: %d", random);
  }
}

试试here!

相关问题