最小化if条件

时间:2011-04-21 17:58:06

标签: java

我编写了以下构造函数,它获取了2个参数,如果值(x或y)为负,它将初始化为零。

public Point1 ( int x , int y )
    {
        //if one or more of the point values is <0 , the constructor will state a zero value.
        if (x < 0)  
        {
            _x = 0;
        }
        else 
            _x=x;
        if (y < 0)
        {
            _y = 0;
        }
        else
            _y = y;
    }

如果它可以......我只需要它是极简主义。

13 个答案:

答案 0 :(得分:9)

_x = Math.max(x,0);
_y = Math.max(y,0);

答案 1 :(得分:4)

_x = Math.max(0, x);
_y = Math.max(0, x);

_x = x < 0 ? 0 : x;
_y = y < 0 ? 0 : y;

答案 2 :(得分:2)

_x = (x<0)?0:x ;
_y = (y<0)?0:y ;

答案 3 :(得分:1)

_x = x < 0 ? 0 : x;
_y = y < 0 ? 0 : y;

答案 4 :(得分:1)

怎么样......

_x = (x < 0) ? 0 : x;
_y = (y < 0) ? 0 : y;

答案 5 :(得分:1)

这可能对您有用:

public Point1 (int x, int y)
{
    _x = x < 0 ? 0 : x;
    _y = y < 0 ? 0 : y;
}

答案 6 :(得分:1)

尝试:

_x = Math.max(0, x);
_y = Math.max(0, y);

答案 7 :(得分:1)

如果你想使用尽可能少的字符,可能会像:

public Point1(int x, int y) {
    _x = Math.max(0,x);
    _y = Math.max(0,y);
}

答案 8 :(得分:0)

编写一个函数NegativeToZero并改为使用它:

_x = NegativeToZero(x);
_y = NegativeToZero(y);

答案 9 :(得分:0)

该代码非常简单。如果你正在寻找更干净的代码(这取决于开发人员)我总是使用三元运算符来处理简单的if-else语句:

_x = (x < 0) ? 0 : x;
_y = (y < 0) ? 0 : y;

如果x&lt; 0,使用0,否则使用x

答案 10 :(得分:0)

public Point1 ( int x , int y ) { 
  if(x < 0 )  x = 0;
  if( y < 0)  y = 0;

  _x = x;
  _y = y;

}

public Point1 ( int x , int y ) { 
 _x = x < 0 ? 0 : x;
 _y = y < 0 ? 0 : y;

}

答案 11 :(得分:0)

我真正喜欢的是:

public Point1(int x, int y) {
    this.x = nonnegative(x);
    this.y = nonnegative(y);
}

其中:

public static int nonegative(int value) {
    if (value < 0) {
        throw new IllegalStateException(
            value + " is negative"
        );
    }
    return value;
}

如果隐藏构造函数并添加静态创建方法,那就更好了(如果更详细一点)。当然,不应该将负面地毯清扫创建方法引入构造函数中。

答案 12 :(得分:0)

这只是为了好玩(没有条件,当然也没有效率)。如果有条件,它会最小化:)

int temp = (x&(~Integer.MAX_VALUE))>>>(Integer.SIZE - 6);      
_x = (x >>> (temp - (temp >> 5))) - (temp >> 5);

轻微改进:

int temp = (x&(~Integer.MAX_VALUE))>>>(Integer.SIZE - 6);      
_x = (x << (temp - (temp >> 5))) & Integer.MAX_VALUE;