【发布时间】:2019-07-21 06:36:15
【问题描述】:
我有一个获取索引值的函数,将其放入数组中。然后使用 rand + srand(key) 生成一个新的新随机索引。它会检查新生成的索引是否已经在数组中,它将继续生成新索引并检查,直到生成唯一值。
问题在于它适用于小的键,但对于较长的键,它会陷入无限循环并且永远找不到唯一值。这是我的代码:
int getNewIndex(PPM *im, int index, int *visitedPixels, int *visitedPixelsIndex) {
int i = 0;
if(*visitedPixelsIndex == im->height) {
perror("Cannot encode anymore: pixels limit reached");
exit(1);
}
visitedPixels[*visitedPixelsIndex] = index;
(*visitedPixelsIndex)++;
// If index is already in the list, generate a new number and check again.
while (i < *visitedPixelsIndex) {
if(index == visitedPixels[i]) {
index = rand() % im->height;
i = 0;
} else {
i++;
}
}
return index;
}
编辑:im->height,即图像高度平均约为 400-600。
【问题讨论】:
-
你提到的“键”是什么?
-
如果从
0到im->height的所有值都在您的数组中,则会出现无限循环 -
visitedPixelsIndex == im->height这是错误的!应该是*visitedPixelsIndex == im->height -
建议:用简单的
if重写你的条件运算符表达式。 -
这是一个建议。在您的代码中,对我来说,
if比条件运算符更容易掌握。我喜欢使条件运算符中的表达式尽可能简单(绝对不是您的代码中的完整语句)。