Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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_Arrays_Random_Probability - Fatal编程技术网

Java 使用数字数组调整特定返回值的几率?

Java 使用数字数组调整特定返回值的几率?,java,arrays,random,probability,Java,Arrays,Random,Probability,我正在创建一个名为getRandomLetter()的方法,我希望随机返回英语字母表中的一个字母。我希望该方法更有可能返回一个与之关联的数字更高的字母 我有两个数组。字母表中的每个字母都有字符。第二个数组有两个,每个都表示另一个数组中具有相同索引的字母将是我的方法返回的字母的可能性 我试图使该方法根据数组中的值有不同的机会返回不同的字母 不幸的是,我的方法只返回z和y 如何使getRandomLetter()根据我为每个字母指定的数字返回特定的字母/字符 我的代码示例: 公共类MCVE{ //

我正在创建一个名为
getRandomLetter()
的方法,我希望随机返回英语字母表中的一个字母。我希望该方法更有可能返回一个与之关联的数字更高的字母

我有两个数组。字母表中的每个字母都有字符。第二个数组有两个,每个都表示另一个数组中具有相同索引的字母将是我的方法返回的字母的可能性

我试图使该方法根据数组中的值有不同的机会返回不同的字母

不幸的是,我的方法只返回z和y

如何使
getRandomLetter()
根据我为每个字母指定的数字返回特定的字母/字符

我的代码示例:

公共类MCVE{
//每个字母的频率在下一个数组中表示为
//与字母在同一索引处的双精度值
最终私有静态字符[]CharArr=“abcdefghijklmnopqrstuvxyz”.toCharArray();
//保留每个字母被选中的百分比机会
//例如:0.1等于10%
//加起来,它们加起来是1.0
最终专用静态双精度[]双精度arr=新双精度[]{
0.087248322147651, 0.035722017752760335, 0.08010391859709894,
0.05520675470881143, 0.046763368694522627, 0.018618748646893266,
0.028144620047629357, 0.021866204806235117, 0.016020783719419788,
0.07101104135094176, 0.06040268456375839, 0.08703182507036156,
0.10002164970772895, 0.027711625893050443, 0.009742368478025547,
0.021433210651656202, 0.0012989824637367395, 0.0458973803853648,
0.07988742151980949, 0.05260878978133795, 0.0015154795410261962,
0.022515696038103484, 0.009309374323446633, 0.0012989824637367395,
0.011690842173630657, 0.006927906473262611};
私有静态字符getRandomLetter(){
double randouble=ThreadLocalRandom.current().nextDouble(0.0,1.0);
char-retVal='';
//从randomDouble中减去DoubleArr中的每个值,直到,
//randomDouble将小于0,然后返回
//与那个双重身份有关
对于(int i=0;igetRandomLetter应该更改为:

for(int i = 0; i < CharArr.length; i++) {

        double subtract = DoubleArr[i];
        if (randomDouble - subtract <= 0.0) {
             retVal = CharArr[i];
             break;
        }
        else
            randomDouble -= subtract;
    }
for(int i=0;i如果(随机双减法您似乎不需要
CharArray
,而是一个简单的循环,带有
int
计数器和
while
循环,根据您的概率测试计数器和累加器。例如

private static char getRandomLetter() {
    double randomDouble = ThreadLocalRandom.current().nextDouble(), v = 0;
    int p = 0;
    while (p < DoubleArr.length && v <= randomDouble) {
        v += DoubleArr[p++];
    }
    return (char) ('a' + Math.min(p, 26) - 1);
}
private static char getRandomLetter(){
double randouble=ThreadLocalRandom.current().nextDouble(),v=0;
int p=0;

而(pprivate static char getRandomLetter() { double randomDouble = ThreadLocalRandom.current().nextDouble(), v = 0; int p = 0; while (p < DoubleArr.length && v <= randomDouble) { v += DoubleArr[p++]; } return (char) ('a' + Math.min(p, 26) - 1); }