我正在尝试编写一个程序,该程序从包含五种不同水果或蔬菜的数组中随机选择三个项目,然后将这个随机选择的内容显示给用户。现在我无法理解为什么我的输出不一致,因为有时当我运行它时我会得到这样的结果:
$sendvar = "?subject=".$subjectfromemail."&from=".=$from."&message=".$messagefromemail."&wrong_code=true";
header("Location:". $_SERVER['HTTP_REFERER'].$sendvar);
die();
前两个项目缺失,有时我会得到这个:
This bundle contains the following:
Broccoli
这是我目前遇到问题的代码部分:
This bundle contains the following:
Tomato
Tomato
Tomato
有人可以帮助我理解为什么我会得到这个输出?谢谢!
答案 0 :(得分:1)
Box[f] = Box[boxee];
正在改变你正在挑选东西的“盒子”的内容。如果第一个随机数是3,则第3项被复制到第0项,所以现在你有两倍的机会在下一次循环中获得该项目......
答案 1 :(得分:1)
您正在使用随机选择的项目覆盖数组的元素。
eMap.sourceExpression = [NSExpression expressionWithFormat:@"FETCH(FUNCTION($manager, \"fetchRequestForSourceEntityNamed:predicateString:\" , \"Country\", \"TRUEPREDICATE\"), $manager.sourceContext, NO)"];
例如:如果Box[f] = Box[boxee];
和boxee=1
,它将覆盖索引0处的元素1,同时索引1处的元素相同,留下相同项目的两个副本。
使用:std:random_shuffle代替。
答案 2 :(得分:1)
不要像你这样做:) 就像@ John3136指出的那样,你搞乱了你的Box变量..
void BoxOfProduce::output()
{
srand(time(NULL)); //keep in mind that this is NOT entirely random!
int boxee = rand() % 5;
int i = 0;
while(i<5)
{
boxee = rand() % 5;
cout<<Box[boxee]<<endl; //this line might be wrong, my point is to print element of your array with boxee index
i++;
}
}