Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Returning a Boolean Error

I am a new-comer to the java language, and I'm confused as to why I am getting an error here. It's a very short piece of code that I seem to have a mental block about. Any suggestions?

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;
        }
    }
}

Does anyone know what I'm missing here? (It's probably really obvious).

like image 565
Ben Hagel Avatar asked Nov 27 '22 00:11

Ben Hagel


1 Answers

Well, firstly, you forgot to have an else clause:

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;
  }
}

Someone else already pointed out this can be shortened as follows:

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);
}

(make sure to upvote them for pointing those out :-)


However, your code is still wrong.

As stated here, Java's ^ operator is for exclusive bitwise OR, not exponentiation. Perhaps you want Math.pow()?

Returns the value of the first argument raised to the power of the second argument.

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);
}

Or, you can also just use Math.hypot rather than rolling your own!

Returns sqrt(x^2 + y^2) without intermediate overflow or underflow.

public boolean checkCircleCollision(float x1, float y1, float r1,
    float x2, float y2, float r2) {
  return Math.hypot(x2 - x1, y2 - y1) <= (r1 + r2);
}
like image 93
obataku Avatar answered Dec 04 '22 22:12

obataku