Java 在不重复的情况下,如何比较1 if语句中的多个整数?
我用Java编写了一些代码来计算自上次检查变量以来虚拟摄像机中的运动。更具体地说,此代码如下所示: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
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..
}
}