所以,这是我试图实现的逻辑:
date120 = date5;
date90 = min(date90,date120);
date60 = min(date60, date90, date120);
date30 = min(date30,date60,date90,date120);
其中min函数找到最低的POSITIVE整数。
以下是我如何循环它:
if(strStatus != "5" && date5 >= 0)
{
date120 = date5;
COUT<<"date30 is "<<date30<<" and date60 is "<<date60<<" and date120 is "<<date5<<" and date90 is "<<date90<<ENDL;
if((date120 < date90) && (date120 >= 0))
{
date90 = date120;
COUT<<"and date90 is "<<date90<<ENDL;
if((date90 < date60) && (date90 >= 0))
{
date60 = date90;
COUT<<"and date60 is "<<date60<<ENDL;
if((date60 < date30) && (date60 >= 0))
{
date30 = date60;
COUT<<"and date30 is "<<date30<<ENDL;
}
}
if((date60 < date30) && (date60 >= 0))
date30 = date60;
}
if((date90 < date60) && (date90 >= 0))
{
date60 = date90;
COUT<<"and date60 is "<<date60<<ENDL;
if((date60 < date30) && (date60 >= 0))
date30 = date60;
}
if((date60 < date30) && (date60 >= 0))
{
date30 = date60;
COUT<<"and date30 is "<<date30<<ENDL;
}
COUT<<"Because there was a 5 and date30 is "<<date30<<" and date60 is "<<date60<<ENDL;
}
日志中的输出如下:
date30 is -1 and date60 is -1 and date120 is 15 and date90 is -1
Because there was a 5 and date30 is -1 and date60 is -1
我的逻辑错误了吗?我错过了逻辑明智的东西吗?有更简单的方法吗?
答案 0 :(得分:2)
首先,您需要一个具有您描述的行为的min
函数:
// If only one of a,b is non-negative, return it.
// if both of a,b are non-negative, return the lesser
// untested
int myMin(int a, int b) {
if(b < 0)
return a;
if(a < 0)
return b;
if(b < a)
return b;
return a;
}
然后你的代码变得微不足道了:
// untested
date120 = date5;
date90 = myMin(date90, date120);
date60 = myMin(date60, date90);
date30 = myMin(date30, date60);
答案 1 :(得分:2)
关于@ Rob's anwer,他需要将min限制为最低正整数,所以我建议你实现一个自定义min函数,例如
int minpos( int x, int y ) {
return x <= 0 ? y : ( y <= 0 ? x : std::min( x, y ) );
}
然后使用@Rob建议的内容:
date120 = date5;
date90 = minpos( date90, date120 );
...
不要忘记#include&lt; algorithm&gt;
我假设如果两个数字都是非正数,则返回哪一个并不重要。
答案 2 :(得分:1)
除此之外,你的代码不会做任何事情,因为date90是-1,所以小于date120。 所以第一个如果没有做任何事情,那么剩下的就没有了。
其他if语句都与第一个语句具有相同的问题。
答案 3 :(得分:1)
你所写的内容相当于:
date120 = date5;
date90 = min(date90, date120);
date60 = min(date60, date90);
date30 = min(date30, date60);
我假设你的代码(>= 0
)你的意思是非负面的,而不是正面的。
我会这样写,我想:
template <typename T>
T min_non_negative(T t1, T t2)
{
return(std::min(t1 >= 0 ? t1 : t2, t2 >= 0 ? t2 : t1)); // Let the compiler do this in the best way for my platform.
}
date120 = date5;
date90 = min_non_negative(date90, date120);
date60 = min_non_negative(date60, date90);
date30 = min_non_negative(date30, date60);