How to deal with a floating point in an object in Java? [closed]
-
21-12-2019 - |
سؤال
I wrote a program for class, The problem I believe is when I'm testing the other class.
Here are links to ideone.com I pasted from.
https://ideone.com/watbZq - tester
import static java.lang.Math.sqrt;
public class ThreePoints {
float x0;
float y0;
float x1;
float y1;
float x2;
float y2;
public ThreePoints(){
this.x0 = 0;
this.y0 = 0;
this.x1 = 0;
this.y1 = 0;
this.x2 = 0;
this.y2 = 0;
}
public ThreePoints(float x0, float y0, float x1, float y1, float x2, float y2){
this.x0 = x0;
this.y0 = y0;
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public double getLength(int side){
if(side == 0 && isTriangle()){
return Math.sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1));
} else if (side == 1 && isTriangle()){
return Math.sqrt((x2-x0) * (x2-x0) + (y2-y0) * (y1-y0));
} else if (side == 2 && isTriangle()){
return Math.sqrt((x1-x0) * (x1-x0) + (y1-y0) * (y1-y0));
}else{ return 0;
}
}
public double getAngle(int vertex){
if(vertex == 0 && isTriangle()) {
double angle = Math.acos((-Math.pow(this.getLength(0),2)
+Math.pow(this.getLength(1),2)
+Math.pow(this.getLength(2),2))
/(2*this.getLength(1)*this.getLength(2)));
return angle;
} else if(vertex == 1 && isTriangle()) {
double angle = Math.acos((Math.pow(this.getLength(0),2)- Math.pow(this.getLength(1),2)
+Math.pow(this.getLength(2),2))/
(2*this.getLength(0)*this.getLength(2)));
return angle;
} else if(vertex == 2 && isTriangle()){
double angle = Math.acos((Math.pow(this.getLength(0),2)
+Math.pow(this.getLength(1),2)- Math.pow(this.getLength(2),2)) /(2*this.getLength(0)*this.getLength(1)));
return angle;
} else {
return 0;
}
}
public boolean isTriangle(){
if (!(x0 * (y1-y2) + x1 * (y2-y0) + x2 * (y0-y1) == 0)){
return true;
}
return false;
}
public boolean isEquilateral(){
if (getLength(0) != getLength(1))
return false;
if (getLength(0) != getLength(2))
return false;
if (getLength(1) != getLength(2))
return false;
return true;
}
public boolean isIsosceles(){
if (getLength(0) == getLength(1))
return true;
if (getLength(0) == getLength(2))
return true;
if (getLength(1) == getLength(2))
return true;
return false;
}
public boolean isScalene(){
if (getLength(0) == getLength(1))
return true;
if (getLength(0) == getLength(2))
return true;
if (getLength(1) == getLength(2))
return true;
return false;
}
public boolean isAcute(){
if (getAngle(0) < 90 && getAngle(1) < 90 && getAngle(2) < 90){
return true;
}
return false;
}
public boolean isObtuse(){
if (getAngle(0) > 90 && getAngle(1) > 90 && getAngle(2) > 90){
return true;
}
return false;
}
public double getPerimeter(){
double perimeter;
perimeter = (getLength(0) + getLength(1) + getLength(2));
return perimeter;
}
public boolean isRight(){
if (getAngle(0) == 90 && getAngle(1) == 90 && getAngle(2) == 90){
return true;
}
return false;
}
public double getArea(){
double s = ((getLength(0) + getLength(1) + getLength(2))/2);
double area = sqrt(s * (s-getLength(0))*(s-getLength(1))*(s-getLength(2)));
return area;
}
private boolean approxEqual (double x, double y) {
return Math.abs(x - y) <= 1E-12;
}
}
And here is the tester class
public class ThreePointsTester {
public static void main(String[] args) {
ThreePoints tp = new ThreePoints();
double tpAngle0 = tp.getAngle(0);
double tpAngle1 = tp.getAngle(1);
double tpAngle2 = tp.getAngle(2);
System.out.println("tp angle 0 is " + tpAngle0);
System.out.println("tp angle 1 is " + tpAngle1);
System.out.println("tp angle 2 is " + tpAngle2);
double tpLength0 = tp.getLength(0);
double tpLength1 = tp.getLength(1);
double tpLength2 = tp.getLength(2);
System.out.println("tp side 0 is " + tpLength0);
System.out.println("tp side 1 is " + tpLength1);
System.out.println("tp side 2 is " + tpLength2);
tp.isTriangle();
tp.isEquilateral();
tp.isIsosceles();
tp.isScalene();
tp.isAcute();
tp.isObtuse();
tp.isRight();
----------------------------------------------*
ThreePoints tp2 = new ThreePoints(3.32, 2.32, 2.12, 4.54, 5.43, 4.23);
double tpAngle0 = tp2.getAngle(0);
double tpAngle1 = tp2.getAngle(1);
double tpAngle2 = tp2.getAngle(2);
System.out.println("tp2 angle 0 is " + tpAngle0);
System.out.println("tp2 angle 1 is " + tpAngle1);
System.out.println("tp2 angle 2 is " + tpAngle2);
double tpLength0 = tp2.getLength(0);
double tpLength1 = tp2.getLength(1);
double tpLength2 = tp2.getLength(2);
System.out.println("tp2 side 0 is " + tpLength0);
System.out.println("tp2 side 1 is " + tpLength1);
System.out.println("tp2 side 2 is " + tpLength2);
tp2.isTriangle();
tp2.isEquilateral();
tp2.isIsosceles();
tp2.isScalene();
tp2.isAcute();
tp2.isObtuse();
tp2.isRight();
}
}
see --------------------------
When I try to create that object, Java is giving me an error. I'm still fairly new to Java, so I'm just trying to understand what I'm doing wrong. Also my boolean methods don't seem to be printing true or false?
المحلول
Try this.
new ThreePoints(3.32f, 2.32f, 2.12f, 4.54f, 5.43f, 4.23f)
Such number literals are doubles by default.
You need to add an f
to make them floats explicitly.
Not sure how you tested the boolean methods
provided your code does not compile.
نصائح أخرى
It looks like you're duplicating your variables here (tpAngleX
and tpLengthX
):
double tpAngle0 = tp.getAngle(0);
double tpAngle1 = tp.getAngle(1);
double tpAngle2 = tp.getAngle(2);
...
double tpAngle0 = tp.getAngle(0);
double tpAngle1 = tp.getAngle(1);
double tpAngle2 = tp.getAngle(2);
If you want to re-use your variable in the same method, you only need to declare it once:
double tpAngle0 = tp.getAngle(0);
...
tpAngle0 = tp.getAngle(0);