【问题标题】:How to deal with a floating point in an object in Java? [closed]Java中如何处理对象中的浮点数? [关闭]
【发布时间】:2014-02-26 23:04:33
【问题描述】:

我为班级编写了一个程序,我相信问题是当我测试另一个班级时。

这是我粘贴的 ideone.com 的链接。

https://ideone.com/UB7x87 -

https://ideone.com/watbZq - 测试员

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

这里是测试器类

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






 }

 }

-------------

当我尝试创建该对象时,Java 给了我一个错误。我对Java还是很陌生,所以我只是想了解我做错了什么。另外我的布尔方法似乎没有打印真假?

【问题讨论】:

  • 你遇到了什么错误?
  • 方法不打印任何东西,除非它们有一个打印一些东西的语句。这些方法返回truefalse,但你只是把结果扔掉了。试试System.out.println("isTriangle = " + tp.isTriangle()) 或类似的东西。
  • “给我一个错误”不是错误描述。 Java 会产生一些非常好的错误消息。在此处复制消息(编辑您的原始帖子并将其粘贴),并指出该消息标识的行。

标签: java performance methods boolean vertex


【解决方案1】:

试试这个。

new ThreePoints(3.32f, 2.32f, 2.12f, 4.54f, 5.43f, 4.23f)

默认情况下,此类数字文字是双精度数。
您需要添加 f 以使它们显式浮动。

不确定您如何测试布尔方法
前提是您的代码无法编译。

【讨论】:

  • 太棒了,谢谢!我几乎没有使用过浮动。现在我知道了!
【解决方案2】:

您似乎在此处复制变量(tpAngleXtpLengthX):

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

如果你想在同一个方法中重复使用你的变量,你只需要声明一次:

double tpAngle0 = tp.getAngle(0);

...

tpAngle0 = tp.getAngle(0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2014-10-04
    • 2018-10-25
    • 2022-01-20
    相关资源
    最近更新 更多