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

Java 在不重复的情况下,如何比较1 if语句中的多个整数?,java,if-statement,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 var

我用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;
}
float-movementX、movementY、movementZ;
movementX=(int)(camX-扇区化[1]);
movementY=(int)(camY-sectorSize[2]);
movementZ=(int)(camZ-扇区化[3]);
/*
*如果变量低于0
*然后得到绝对值
*自二战以来的运动
*最后一个摄像机位置。
*/
如果(movementX<0)movementX*=-1;
如果(movementY<0)movementY*=-1;
如果(movementZ<0)movementZ*=-1;
如果(移动X>60 | |移动Y>60 | |移动Z>60)
{   
//重置扇区大小以允许新点,
//不存储以节省内存(以后可能会更改)。
扇区化[0]=0;
}
如果您需要更多的代码,请告诉我。sectorSize变量在其[0]值中存储0-500,在其[1]值中存储前camX,在其[2]值中存储前camY,最后在其[3]值中存储前camZ。camX、camY和camZ由其他代码处理(不显示)。删除了所有内容,但问题代码除外,以保持整洁


此代码按原样工作,但每次键入“if(a_int_值>a_其他_值| | |等)”都有点乏味。

将力矩放入int数组

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

像这样的

boolean ok = false;

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

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

我假设所有的条件都是一样的。如果它们不同,您也可以泛化代码,但您需要创建一个类来存储条件。。。这项工作不值得,因此最好对条件进行编码

还有一件事。您只有树值。如果您有很多值(具有相同的条件),我认为迭代会很好,但是在您的场景中,我认为最好对每个条件进行编码,因为正如Ghost所说的那样,代码更容易理解


[]的

我将创建一个移动类,并对其中的“合法”移动参数进行编码。
然后可以测试:movementX.isValid()。您还可以保留一个列表或创建另一个类来包装三个轴,并使用单个isValid()方法进行测试

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


最后,为什么要将浮点值转换为int?这有什么好处?如果要去掉小数点,有更好的方法来截断或降低值的上限。

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

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()


不过,在某种程度上,让运动成为一门常规课程可能会更好。

内部课程看起来是最好的方式。糟糕的是,java没有提供任何资源密集度较低的功能,但是能够用相同的表达式比较一组变量会有很大帮助

如果该代码可信,movementX将永远不会大于60。如果大于0,它将变为负数,因此永远不会达到正数。至少可以说,这相当令人困惑。你确定你没有把>混在一起,应该用这是最清晰的方法吗?真的,是的,打字很乏味,但很清楚,很容易理解。为了我的钱,我只需要做
movementX=(int)Math.abs(camX-sectorSize[1])还有,在
“//做点什么..”
这个程序是用来制作一些基本的点星的,我把它们保持在500扇区。这是为了计算我是否应该创建一个新扇区,因为相机离前一个扇区足够远。我刚刚意识到我确实弄错了“”,相应地调整了代码。扇区大小[0]值必须是int,因为它描述了屏幕上有多少白点(“星星”)。小数在这个计算中并不是很重要,但它是用于移动的,所以我将camX、camY和camZ值作为浮点数。它主要是为了防止白点过度拥挤(我以前有过这种情况,它使一切都变慢了。而且是白色的)。谢谢,我想我现在将坚持使用长if语句(只有3个变量,创建一个完整的类有点过分了)。但这对我将来的想法很有用,现在我知道了为什么dot没有画(混合>了)
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..
   }
}