我编写了一个代码,用于使用rand()
选择数组中的数字。函数rand_range函数选择数组中最小数字和数组元素总和之间的随机数。从第一个元素开始添加数组数组元素,如果总和超过生成的随机数,则选择元素。重复此操作直到所需的选择次数。
该程序在另一个循环内调用,因此它运行了几次。但问题是它是否正在成功运行初始调用,但后来调用它将进入无限循环而不会中断。
loop: while (1)
{
random=rand_range(minimum,total);
chk=0;
for(i=0;i<npop;i++)
{
chk+=obj[i];
if(chk>=random)
{
selectedix=i;
break;
}
}
for(i=0;i<countselected;i++)
{
if(selectedix==previx[i])
goto loop;
}
previx[countselected]=selectedix;
selectedarr[selectedix]=obj[selectedix]; //selected array
countselected+=1;
if (countselected==npop)
break;
}
请帮助,因为我无法理解为什么它正在运行某些通话而不是其他通话。
答案 0 :(得分:1)
正确阅读您的代码后,我明白它的含义。 您基本上是根据对象中的分布/直方图对概率上的数字列表进行排序。
看起来很好:
loop: while (1)
{
random=rand_range(minimum,total);
chk=0;
for(i=0;i<npop;i++)
{
chk+=obj[i];
if(chk>=random)
{
selectedix=i;
break;
}
}
for(i=0; i<countselected; i++)
if(selectedix==previx[i])
goto loop;
previx[countselected]=selectedix;
selectedarr[selectedix]=obj[selectedix];
countselected++;
//if countselected was not initialised to zero
//an infinite loop could occur here
printf("%d", &countselected);
if (countselected==(npop-1))
break;
}
}
直到某些obj [i] == 0 - chk永远不会停止!或者,较小的值将导致长循环。此外,如果obj [0]小于最小值,则会出现问题。