我想知道是否有一种方法可以使用同一变量检查多个while循环条件。这有点含糊,但是此示例应将其清除:
while (myFunction(x) == 0 || myFunction(x) == 13639 || myFunction(x) == -4261.9583)
{ x++; }
是否有可能在检查三个条件时每个循环仅评估myFunction(x)一次,从而使该函数不必为相同的结果分别运行三个不同的时间?
我这样做是出于优化/效率的目的。 myFunction()可能是一个非常耗时的函数,所以我希望它运行所需的最少时间。
通常,我会在开始while循环之前定义myFunction(x)的值,但是在这种情况下,myFunction(x)的值将随着循环执行每次迭代而变化,因为x的值将在改变。
答案 0 :(得分:4)
是的,可以这样做:
double result;
while ((result = myFunction(x)) == 0 || result == 13639 || result == -4261.9583)
{ x++; }
答案 1 :(得分:2)
三个选项:
检查结果列表,而不是对照列表检查结果。
var list = new float[] { 0F, 13639F, -4261.9583F );
while (list.Contains(myFunction(x))
{
x++;
}
将逻辑提取到另一个函数始终是解决问题的好方法。
bool IsValid(float input)
{
var result = myFunction(input);
return (result == 0 || result == 13639 || result == -4261.9583);
}
while (IsValid(x))
{
x++;
}
while(true)
每当while循环的条件复杂时,通常的选择是从()
中删除支票,然后将其放入{}
中。执行此操作时,请使用while (true)
。
while (true)
{
var result = myFunction(x);
if (result != 0 && result != 13639 && result != -4261.9583) break;
x++;
}
答案 2 :(得分:1)
您可以简单地通过将检查移到一个单独的方法中来执行此操作,该方法将函数的返回值作为参数,然后直接对该值执行3次检查并相应地返回布尔值。
假设该函数返回一个int
类型的值,则该值可能看起来像这样:
bool CheckResultValue(int value) {
return value == 0 || value == 13639 || value == -4261.9583;
}
然后您的while循环可能看起来像这样:
while (CheckResultValue(myFunction(x)))
{ x++; }