【发布时间】:2020-06-27 19:14:20
【问题描述】:
void putTile(int &n1, int &n2, int &n3, int &n4, int &n5, int &n6, int &n7, int &n8, int &n9)
{
srand(time(0));
int i = (((rand()%10)) < 5 ? 2:4);
if (n1||n2||n3||n4||n5||n6||n7||n8||n9 == 0) {
switch((rand()%9) + 1) {
case 1:
n1 = i;
break;
case 2:
n2 = i;
break;
case 3:
n3 = i;
break;
case 4:
n4 = i;
break;
case 5:
n5 = i;
break;
case 6:
n6 = i;
break;
case 7:
n7 = i;
break;
case 8:
n8 = i;
break;
case 9:
n9 = i;
break;
}
}
}
我试图在空的地方(包含 0 的地方)随机生成 2 或 4,但我的算法在随机位置输入随机生成的数字(2 或 4),即使在已经有数字的地方,因为我使用了代码开头的 if 语句。有关如何更正代码的任何建议?
【问题讨论】:
-
n1||n2||n3||n4||n5||n6||n7||n8||n9 == 0不会像您认为的那样做。||运算符接受两个布尔参数并返回一个布尔值。它不能代替英文单词“or”。 -
题外话:不用每次调用函数都调用
srand。 -
除了损坏的
if条件之外,您的代码不能与您描述的不同。如果代码被执行(几乎可以保证),它总是会在随机位置写入随机数。所选位置与该位置是否空闲无关。 -
n1||n2||n3||n4||n5||n6||n7||n8||n9 == 0与n1 != 0 || n2 != 0 || n3 != 0 || n4 != 0 || n5 != 0 || n6 != 0 || n7 != 0 || n8 != 0 || n9 == 0相同