-1

我们要找到连续输入值之间的差异并返回最大的变化。我的主要问题是找到正确的运算符来使用(我认为)。我也希望它能够处理负值..

if(count > 0){
      change = Math.abs(temp) - Math.abs(temp2);
      UI.println(change);
      if(Math.abs(change) > Math.abs(bigChange)){
           bigChange = Math.abs(change);
      }
}
4

3 回答 3

1

您对 abs 的使用不正确。考虑 temp 为 -1 且 temp2 为 1 的情况。这些值之间的差值为 2,但您的例程会将其计算为 0。

尝试:

if(count > 0) {
  change = Math.abs(temp - temp2);
  UI.println(change);
  if( change > bigChange ) {
    bigChange = change;
  }
}
于 2013-04-09T10:08:45.377 回答
0

如果你想找到数字之间的变化,你应该使用

change = Math.abs(temp- temp2);

代替

 change = Math.abs(temp) - Math.abs(temp2);

你也应该初始化变量

bigChange=0 

此外,由于变量 change 和 bigChange 始终大于零,您可以避免再次调用 Math.abs 方法。

if(change > bigChange)
      {
          bigChange = change;
      }

也是正确的。

于 2013-04-09T10:11:56.727 回答
0

它应该相当简单:

int diff = temp - temp2;
max = Math.max(maxDifference, Math.abs(diff));
println(max).

你还有其他要求吗?Math.max 和 Math.min 已经非常优化,并且与自己进行比较一样快。而且是单线。对于 Math.max vs (a > b ? a : b) 也可以查看这个答案

Math.max(a,b) or (a>b)?a:b 在 Java 中更快吗?

于 2013-04-09T10:12:26.810 回答