【发布时间】:2014-06-11 12:36:21
【问题描述】:
我正在尝试相对于宽度为 72 像素的方形位图定位大小为 10 像素的形状。
在以下代码中:
fShapeLocation 指的是形状的最终位置
fBitmapWidth指的是位图的X宽度
cTopLeft.getX() 是位图的左上角
我要添加的对象应该正好出现在位图顶部 X 的 2/3+1/6 处(就在形状最后三分之一的正上方)。
类似这样的东西(^^^ 是我想要的,[] 与位图正方形的四个角有关):
^^^
[ ]
[ ]
fShapeLocation=this.cTopLeft.getX()+((this.fBitmapWidth/3)*2);
fShapeLocation+=(fBitmapWidth/6)-5;
请注意我尝试放入多少个括号以强制算术优先级。
实际上,形状出现在位图的中间。我非常怀疑这是由 java 计算算术表达式的顺序引起的。我宁愿将我的代码缩短为一行并将形状放置在正确的位置 - 谁能帮帮我? (我很抱歉我从来都不擅长数学)
【问题讨论】:
-
错误,2/3 加 1/6 等于 5/6。这些括号不会改变评估顺序。您的实际问题仍不清楚。
-
感谢您的回复。我会尝试澄清 - 我的问题是使用括号是否会“强制”java以我想要的顺序评估表达式。例如:3+4-2 -> (3+4)-2 vs 3+(4-2) - 括号是否强制编译器的评估顺序?
-
他们当然会这样做:这就是他们的目的;但是您在发布的代码中添加的那些不会更改您发布的代码中的顺序。您的问题出在其他地方。
标签: java android math canvas operator-precedence