Java double刚刚赢得';不要否定!为什么?

Java double刚刚赢得';不要否定!为什么?,java,types,double,Java,Types,Double,出于某种原因,我很难否定一个double,然后在满足某个条件时返回它。它保持积极,尽管有其他的诱骗 public static double angleDiffNoAbs(double from, double to, double maxValue) { double diff = to - from; double absdiff = Math.abs(diff); if (absdiff > maxValue) { double newdiff; b

出于某种原因,我很难否定一个double,然后在满足某个条件时返回它。它保持积极,尽管有其他的诱骗

 public static double angleDiffNoAbs(double from, double to, double maxValue) {  
  double diff = to - from;
  double absdiff = Math.abs(diff);

  if (absdiff > maxValue) {
   double newdiff;

   boolean clockwise = false;

   if (from < to) {
    newdiff = maxValue;
    clockwise = true;
    System.out.println("c");
   } else {
    System.out.println("ac");
    newdiff = maxValue * -1.0d;
   }

   System.out.println("from: " + from + ", to: " + to + ", diff: " + diff + ", absdiff: " + absdiff + ", newdiff(limited): " + newdiff + ", wound: " + (clockwise ? "clockwise" : "anti-clockwise"));

   return newdiff;
  }

  double result = ((180d + diff) % 360d) - 180d;
  if (result < -180d) result = 360d + result;

  return result;
 }
我已经研究这个问题很久了,但还是无法解决问题。JUnit测试如下(如果有帮助):

此结果似乎来自您的第四个测试用例(
testAngleDiff4
),其中您为
maxValue
传递了一个负值
-10d
。当您执行
newdiff=maxValue*-1.0d
时,两个否定项会相互抵消,留下一个肯定的答案


此结果似乎来自您的第四个测试用例(
testAngleDiff4
),其中您为
maxValue
传递了一个负值
-10d
。当您执行
newdiff=maxValue*-1.0d
时,两个否定项会相互抵消,留给您一个肯定的答案。

您的代码似乎在这里工作。也许可以尝试强制进行完全重建?您的代码似乎在这里工作。也许试着强制进行全面重建?哎呀,我是个傻瓜:)干杯。我还发现我在做最后一个测试用例的Math.abs,然后检查它。这是你复制意大利面测试用例得到的结果。不是傻瓜。但是你忘记了调试的基本规则:假设错误在你的代码中。@Chris Dennett:一点也不,它发生在每个人身上。看似不可能的错误往往是由于忽略了一些简单的东西而引起的,大脑会捉弄你,使你更难发现它们。@Casablanca:我把这称为PES:“程序员的自我综合症”。在那里,对于你的一生来说,你根本看不到自己的错误,因为你的大脑绝对确定你不可能犯错误,并自动纠正你的眼睛所看到的。哎呀,我是个傻瓜:)为此干杯。我还发现我在做最后一个测试用例的Math.abs,然后检查它。这是你复制意大利面测试用例得到的结果。不是傻瓜。但是你忘记了调试的基本规则:假设错误在你的代码中。@Chris Dennett:一点也不,它发生在每个人身上。看似不可能的错误往往是由于忽略了一些简单的东西而引起的,大脑会捉弄你,使你更难发现它们。@Casablanca:我把这称为PES:“程序员的自我综合症”。在你的一生中,你就是看不到自己的错误,因为你的大脑绝对确定你不可能犯错误,并自动纠正你眼睛看到的错误。
c
from: -10.0, to: 20.0, diff: 30.0, absdiff: 30.0, newdiff(limited): 10.0, wound: clockwise
ac
from: 20.0, to: -10.0, diff: -30.0, absdiff: 30.0, newdiff(limited): 10.0, wound: anti-clockwise
public class AngleDiffTest {
 @Test
 public void testAngleDiff() {
  double diff = Math.abs(Player.angleDiffNoAbs(353, 12, 360f));
  Assert.assertFalse("diff > 200: " + diff, diff > 200);
 }

 @Test
 public void testAngleDiff2() {
  double diff2 = Math.abs(Player.angleDiffNoAbs(360, 0, 360f));
  Assert.assertFalse("diff2 > 200: " + diff2, diff2 > 200);
 }

 @Test
 public void testAngleDiff3() {
  double diff2 = Math.abs(Player.angleDiffNoAbs(-10d, 20d, 10d));
  Assert.assertEquals("diff2 != 10.0: " + diff2, 10d, diff2);
 }


 @Test
 public void testAngleDiff4() {
  double diff2 = Math.abs(Player.angleDiffNoAbs(20d, -10d, -10d));
  Assert.assertEquals("diff2 != -10.0: " + diff2, -10d, diff2);
 } 
}
from: 20.0, to: -10.0, diff: -30.0, absdiff: 30.0, newdiff(limited): 10.0, wound: anti-clockwise