Java返回布尔错误

Ben*_*gel 4 java methods boolean return collision

我是java语言的新手,我很困惑为什么我在这里收到错误.这是一段很短的代码,我似乎有一个心理障碍.有什么建议?

public class Rigidbody {
    public boolean checkCircleCollision(float x1,float y1,float size1,float x2,float y2,float size2){
        if(Math.sqrt(((x2-x1)^2)+((y2-y1)^2))<=(size1+size2)){
            return true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我在这里缺少什么?(这可能非常明显).

old*_*inb 14

嗯,首先,你忘记了一个else条款:

public boolean checkCircleCollision(float x1, float y1, float r1,
    float x2, float y2, float r2) {
  if (Math.sqrt(((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)) <= (r1 + r2)){
    return true;
  } else {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

其他人已经指出这可以缩短如下:

public boolean checkCircleCollision(float x1, float y1, float r1,
    float x2, float y2, float r2) {
  return Math.sqrt(((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)) <= (r1 + r2);
}
Run Code Online (Sandbox Code Playgroud)

(确保将它们用于指出那些:-)


但是,您的代码仍然是错误的.

如前所述这里,Java的^运营商是独家位或不幂.也许你想要Math.pow()

返回第一个参数的值,该值是第二个参数的幂.

public boolean checkCircleCollision(float x1, float y1, float r1,
    float x2, float y2, float r2) {
  return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)) <= (r1 + r2);
}
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用Math.hypot而不是自己滚动!

返回sqrt(x ^ 2 + y ^ 2),没有中间溢出或下溢.

public boolean checkCircleCollision(float x1, float y1, float r1,
    float x2, float y2, float r2) {
  return Math.hypot(x2 - x1, y2 - y1) <= (r1 + r2);
}
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 11

你可以让方法的身体更简单......

public class Rigidbody {
    public boolean checkCircleCollision(float x1,float y1,float size1,float x2,float y2,float size2){
        return Math.sqrt(((x2-x1)^2)+((y2-y1)^2))<=(size1+size2)    
    }
}
Run Code Online (Sandbox Code Playgroud)

结果<=始终是布尔值.


Joã*_*lva 9

你忘记了那个else部分if.

public boolean checkCircleCollision(float x1,float y1,float size1,float x2,float y2,float size2){
    if (Math.sqrt(Math.pow(x2-x1, 2)+ Math.pow(y2-y1,2)) <= (size1+size2)) {
        return true;
    } else {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个可以简化为:

public boolean checkCircleCollision(float x1,float y1,float size1,float x2,float y2,float size2){
  return Math.sqrt(Math.pow(x2-x1, 2)+ Math.pow(y2-y1,2)) <= (size1+size2);
}
Run Code Online (Sandbox Code Playgroud)

编辑:另外,正如@veer所指出的,^2当你应该使用时,你正在使用Math.pow,因为^Java中的运算符是按位异或,而不是幂运算符.因此,请继续投票并接受他的回答,因为这是错误的主要原因.