Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java概率随机化器_Java - Fatal编程技术网

Java概率随机化器

Java概率随机化器,java,Java,我需要知道是否有办法将一个数字指定给一个字符串,并让随机化器选择一个数字,这取决于它返回字符串的数字。我知道这让人困惑,所以举个例子 item1 = 0 to 15 item2 = 16 to 35 item3 = 36 to 65 item4 = 66 to 85 item5 = 86 to 95 item6 = 96 to 99 现在假设随机化器生成数字63,那么作为回报,您将获得item3 谢谢如果概率、项目数量和项目本身没有变化,这是一种简单的方法: public String get

我需要知道是否有办法将一个数字指定给一个字符串,并让随机化器选择一个数字,这取决于它返回字符串的数字。我知道这让人困惑,所以举个例子

item1 = 0 to 15
item2 = 16 to 35
item3 = 36 to 65
item4 = 66 to 85
item5 = 86 to 95
item6 = 96 to 99
现在假设随机化器生成数字63,那么作为回报,您将获得item3


谢谢

如果概率、项目数量和项目本身没有变化,这是一种简单的方法:

public String getRandomString() {
    int number = (int)(Math.random() * 100)
    if(number >= 0 && number <= 15) return "item1";
    if(number >= 16 && number <= 35) return "item2";
    if(number >= 36 && number <= 65) return "item3";
    if(number >= 66 && number <= 85) return "item4";
    if(number >= 86 && number <= 95) return "item5";
    if(number >= 96 && number <= 99) return "item6";

    // the computer will never get to here, but the compiler doesn't know that
    // (though it might happen if you change the numbers above, and don't
    // cover all the numbers 1 to 99)
    throw new RuntimeException("this shouldn't happen!");
}
公共字符串getRandomString(){
整数=(int)(Math.random()*100)

如果(number>=0&&number=16&&number=36&&number=66&&number=86&&number=96&&number,您可以使用
NavigableMap
。这允许您为项目分配权重,并使用该方法根据其权重随机选择项目

要生成地图,您只需执行以下操作。每个项目都会添加到地图中,并带有其总重量,以及之前的所有项目。在您的情况下,您不必将运行总数相加,因为您已经有了范围

NavigableMap<Integer, String> map = new TreeMap<Integer, String>();
String[] items = new String[]{"item1","item2","item3","item4","item5","item6"};
int[] weights = new int[]{15,35,65,85,95,99};

int totalWeight = 0; // track this for use in random number generation
for (int i = 0; i < weights.length; i++) {
    totalWeight = weights[i];
    map.put(totalWeight, items[i]);
}
NavigableMap=newtreemap();
字符串[]项=新字符串[]{“item1”、“item2”、“item3”、“item4”、“item5”、“item6”};
int[]权重=新的int[]{15,35,65,85,95,99};
int totalWeight=0;//跟踪此值以用于随机数生成
对于(int i=0;i
您需要为多少个可能的项目执行此操作?到目前为止您尝试了什么?首先从0-100生成一个nr,然后使用if-else子句返回字符串。每个项目都应该有一个
双倍重量
,总共(对于所有项目)求和为1。然后,您只需生成一个介于0和1之间的随机数,并计算出该值用于哪个项目(与您的操作方式类似,但不是0-->100执行0.00-->1.00。如果按升序进行测试,则无需检查下限。@immibis现在是如何将随机化器的结果放入System.out的。println@baju是的,但我认为这可能会使它的工作原理更加明显(对于询问者)。
NavigableMap<Integer, String> map = new TreeMap<Integer, String>();
String[] items = new String[]{"item1","item2","item3","item4","item5","item6"};
int[] weights = new int[]{15,35,65,85,95,99};

int totalWeight = 0; // track this for use in random number generation
for (int i = 0; i < weights.length; i++) {
    totalWeight = weights[i];
    map.put(totalWeight, items[i]);
}