2
阵列我有这个洗牌阵列的Arduino软件有问题:随机播放的Arduino软件
int questionNumberArray[10]={0,1,2,3,4,5,6,7,8,9};
有谁知道在函数生成或方式来洗牌数组中的值没有任何重复?
阵列我有这个洗牌阵列的Arduino软件有问题:随机播放的Arduino软件
int questionNumberArray[10]={0,1,2,3,4,5,6,7,8,9};
有谁知道在函数生成或方式来洗牌数组中的值没有任何重复?
最简单的方法将是这个小for
循环:
int questionNumberArray[] = {0,1,2,3,4,5,6,7,8,9};
const size_t n = sizeof(questionNumberArray)/sizeof(questionNumberArray[0]);
for (size_t i = 0; i < n - 1; i++)
{
size_t j = random(0, n - i);
int t = questionNumberArray[i];
questionNumberArray[i] = questionNumberArray[j];
questionNumberArray[j] = t;
}
让我们打破它一行行,好吗?
int questionNumberArray[] = {0,1,2,3,4,5,6,7,8,9};
如果初始化一个数组,那么不需要放置单元数。只需像我一样将括号留空即可。
const size_t n = sizeof(questionNumberArray)/sizeof(questionNumberArray[0]);
我决定存储在n
恒定的细胞数。运算符sizeof
为您提供阵列占用的字节数和一个单元占用的字节数。您将第一个数字除以第二个数字,并且您的数组大小。
for (size_t i = 0; i < n - 1; i++)
请注意,该循环的范围是n - 1
。我们不希望i
永远有最后一个指数的价值。
size_t j = random(0, n - i);
我们声明变量j
指向带有指数比i
更大一些随机的电池。这就是为什么我们不希望i
具有n - 1
的价值 - 因为然后j
会超出限制。我们得到的随机数与Arduino的的random
功能:https://www.arduino.cc/en/Reference/Random
int t = questionNumberArray[i];
questionNumberArray[i] = questionNumberArray[j];
questionNumberArray[j] = t;
两个值的简单交换。有可能在没有临时t
变量的情况下执行此操作,但代码的可读性较差。
在我的情况下,结果如下:
questionNumberArray[0] = 0
questionNumberArray[1] = 9
questionNumberArray[2] = 7
questionNumberArray[3] = 4
questionNumberArray[4] = 6
questionNumberArray[5] = 5
questionNumberArray[6] = 1
questionNumberArray[7] = 8
questionNumberArray[8] = 2
questionNumberArray[9] = 3
你尝试谷歌“洗牌阵”? – TDG
http://forum.arduino.cc/index.php?topic=43424.0 –
我做了,这些答案只适用于二进制数组,因为值可以重复,因为我试图解释我的问题。 – murloc