【发布时间】:2017-10-11 15:11:00
【问题描述】:
我正在尝试生成一个包含 4 个随机生成的 [srand seeded rand()] 的数组,没有任何重复。我正在使用 for 循环:
在数组中选择一个位置, 生成一个数字, 将编号分配给当前突出显示的位置 根据以下伪代码检查分配的数字是否不等于先前的条目。
if no -
Then select the next position in the array and generate a new number
if yes -
Do not move to the next array position and generate a new number again.
repeat until array position 3
这是我的尝试:
int operator_selection;
int operator_index[3];
int random_value;
for (operator_selection = 0; operator_selection < 4; operator_selection++)
{
random_value = rand() %4 + 1;
if (random_value = operator_index[0] || operator_index[1] || operator_index[2])
{
(operator_selection - 1);
}
operator_index[operator_selection] = random_value;
cout<<operator_index[operator_selection]<<" ";
if (operator_selection == 3)
{
cout<<endl;
}
}
但是,当我运行可执行文件时,我总是以重复结束,所以我很确定我的第一个“if 语句”背后的逻辑是有缺陷的。
我是一名 C++ 初学者,这是我第三次尝试从头开始编写源文件,如果我犯了一个愚蠢的错误,敬请见谅。
【问题讨论】:
-
如果您需要存储唯一值,请使用
std::set。 -
除了错误写入的条件之外,您还有未定义的行为。在分配元素之前,您不能检查它的值。例如,在第一次迭代中,只有
operator_index[0]被赋值,但随后您检查索引 1 和 2 处的元素。您应该重新考虑只验证先前定义的元素的方法。此外,您可以确定,如果您为元素 0 分配一个值,那么该元素的值将等于您刚刚分配给它的值。 -
用唯一值填充您的数组(不是随机的,1,2,3 ... 很明显),然后使用
std::random_shuffle使它们随机化。 -
顺便说一句,检查数组值是否唯一的简单方法:
array_size == std::set( array_begin, array_end ).size() -
所示代码中有多个错误,包括逻辑错误和语言错误。 “
if (random_value = operator_index[0] || operator_index[1] || operator_index[2])”——这在许多基本方面都是完全错误的。你真的需要阅读一本好的 C++ 书籍。 C++ 根本无法以这种方式工作。 “(operator_selection - 1);”——这绝对没有任何作用。真的:去读一本好的 C++ 书。抱歉,此代码不可挽救。
标签: c++ arrays c++11 random logic