【问题标题】:Forcing precedence in arithmetic operations in Android/Java [closed]在 Android/Java 中强制算术运算优先[关闭]
【发布时间】: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


【解决方案1】:

当你的意思是*5时你写了-5吗?那会同意你的文字。如果是这样,你的表达可以归结为

fShapeLocation = c.topLeft.getX()+fBitmapWidth*5/6;

根本没有括号,除了方法调用。无需更改评估顺序。

【讨论】:

    猜你喜欢
    • 2015-08-29
    • 1970-01-01
    • 2022-12-04
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多