如何在不重复的情况下比较1 if语句中的多个int?

时间:2012-07-12 22:33:12

标签: java if-statement

我在Java中有一些编码来计算自上次检查变量以来虚拟摄像机中的移动。更具体地说,这段代码如下:

float movementX, movementY, movementZ;                  
movementX = (int) (camX - sectorSize[1]);
movementY = (int) (camY - sectorSize[2]);
movementZ = (int) (camZ - sectorSize[3]);

/*
 * If the variable is below 0
 * then get the absolute value
 * of the movement since the
 * last camera position.
 */
if (movementX < 0) movementX *= -1;
if (movementY < 0) movementY *= -1;
if (movementZ < 0) movementZ *= -1;

if (movementX > 60 || movementY > 60 || movementZ > 60) 
{   
    //Reset the sector size to allow for new points,
    //don't store to save memory (may be changed later).
sectorSize[0] = 0;
}

如果您需要更多代码,请与我们联系。 sectorSize变量在其[0]值中存储0-500,前一个camX在它的[1]值中,前一个camY在它的[2]值中,最后是前一个camZ在它的[3]值中。 camX,camY和camZ由其他代码处理(未显示)。删除了除了代码之外的所有内容以保持整洁。

此代码按原样运行,但每次输入“if(a_int_value&gt; an_other_value || etc)”有点单调乏味。

4 个答案:

答案 0 :(得分:0)

将片刻放入int数组。

迭代数组搜索所有真实条件。如果遇到真实条件,请将标志标记为true并中断循环。最后,如果没有条件,则您的标志为false。

像这样。

boolean ok = false;

for ( int v : momentArray ) {
    if ( v > 60 ) {
        ok = true;
        break;
    }
}

if ( ok ) {
    // ok, do something...
}

public static boolean checkForValues( int[] array, int min ) {

    for ( int v : array ) {
        if ( v > min ) {
            return true;
        }
    }

    return false;

}


// in another class...

if ( checkForValues( momentArray, 60 ) ) {
    // ok, do something...
}

我假设所有条件都相同。如果它们不同,你也可以概括代码,但是你需要创建一个classe来存储条件......它不值得工作,因此最好编写条件。

另一件事。你只有树的价值。如果你有很多值(具有相同条件),我认为迭代会很好,但在你的场景中,我认为编写每个条件更好,因为Ghost说更容易理解代码。

[]的

答案 1 :(得分:0)

我会创建一个Movement类并对&#34; legal&#34;的参数进行编码。内在的运动。
然后你可以测试:movementX.isValid()。您还可以保留一个List或创建另一个类来包装三个轴,并使用一个isValid()方法进行测试。

您应该考虑将扇区大小存储在比数组更具描述性的内容中。

最后,为什么要将你的花车投射到int?这可以带来什么好处?如果您要删除小数,则有更好的方法可以截断或降低/降低值。

答案 2 :(得分:0)

在方法中创建一个本地类:

void myMethod ( )
{
   class Movements
   {

     float movementX = (int) (camX - sectorSize[1]);
     float movementY = (int) (camY - sectorSize[2]);
     float movementZ = (int) (camZ - sectorSize[3]);

     boolean check3Axes ( int commonValue )
     {
       return 
         movementX > commonValue
           ||
         movementY > commonValue
           ||
         movementZ > commonValue ; 
     }

     void negate (  )
     {
       if (movementX > 0) movementX *= -1;
       if (movementY > 0) movementY *= -1;
       if (movementZ > 0) movementZ *= -1;
     }
   };

   Movements m = new Movements( );

   // This can be replaced with m.negate( )
   if (m.movementX > 0) m.movementX *= -1;
   if (m.movementY > 0) m.movementY *= -1;
   if (m.movementZ > 0) m.movementZ *= -1;

   if (m.check3Axes(60))
   {   
      //do something..
   }

   if (m.check3Axes(120))
   {   
      //do something else..
   }
}

顺便说一句,您可能会发现可以向Movements类添加更多常用方法,例如negate()

但是,在某些时候,最好让运动成为常规课程。

答案 3 :(得分:0)

内在阶层看起来是最好的方式。太糟糕的java没有提供任何资源密集程度较低的东西,但是将一堆变量与同一个表达式进行比较的能力有很大帮助!