【发布时间】:2021-10-20 12:50:45
【问题描述】:
我在循环中有重复 - 当isAllowed = true - 然后继续下一次迭代,但当 isAllowed 为假时 - 然后程序应该重复生成随机位置、坐标并检查 isAllowed 是否为真。
如何在该循环中进行递归以实现此目标?
foreach (var fleet in groupedFleetsbySpaceshipCounts)
{
var randomPositionX = new Random().Next(0, 9);
var randomPositionY = new Random().Next(0, 9);
var cords = int.Parse(randomPositionX.ToString() + randomPositionY);
map.Location[cords].ActualFleetPosition = fleet.Key[i];
var isAllowed = IsPositionAllowed(map, cords);
if (isAllowed)
{
break;
}
else
{
randomPositionX = new Random().Next(0, 9);
randomPositionY = new Random().Next(0, 9);
cords = int.Parse(randomPositionX.ToString() + randomPositionY);
map.Location[cords].ActualFleetPosition = fleet.Key[i];
isAllowed = IsPositionAllowed(map, cords);
if (isAllowed)
{
break;
}
else
{
//recursion
}
}
i++;
}
【问题讨论】:
-
var randomPositionX = new Random().Next(0, 9); var randomPositionY = new Random().Next(0, 9);不要这样做,将范围之外的随机数声明为静态(类级别),然后在调用代码中使用它们。 -
我建议您在想要进行下一次迭代时使用 simple for 并移动/增加迭代器/索引器,除非它自动重复循环。
-
您不应在循环中创建新的
Random实例 - 您也不需要不同的实例来生成 2 个值。
标签: c# .net for-loop recursion