【问题标题】:Accessing variables in public constructor in java在java中的公共构造函数中访问变量
【发布时间】:2014-11-15 18:35:22
【问题描述】:

如果你有

class Triangle
{
  private double x1,x2,x3,y1,y2,y3;
  public Triangle(Point point1, Point point2, Point point3) 
  { 
    x1=point1.getX();
    y1=point1.getY();
    x2=point2.getX();
    y2=point2.getY();
    x3=point3.getX();
    y3=point3.getY();

    //Trying to get x and y values of point1-point3

  }

  double width=x1-x2;
  double length=y3-y2;

  public double area() 
  { 
    return (length * width)/2; 
  }
}

编辑:我也只获取除长度之外的所有值。 length 打印出 0 但 y3 和 y2 仍然能够打印值。我正在使用双打的随机数生成器:

double randomValue = Math.random() * 100;

这可能是双打减法的问题吗?

我基本上定义了两个变量 x 和 y 的点,我正在尝试计算三角形的这个区域。当有人给出 3 个点来制作这个三角形时,我试图从这些点中获取这些值,并且我确实有我的点的吸气剂,但我最终没有得到长度和宽度。

【问题讨论】:

    标签: java


    【解决方案1】:

    widthlength 都应该是 area() 方法或构造函数内部的局部变量。如果这个对象是不可变的,它可以在你的构造函数中计算出来,但是如果你将 getter/setter 暴露给对象,我会说最好在 area() 方法中计算它们。

    public double area() 
    { 
        double width=x1-x2;
        double length=y3-y2;
        return (length * width)/2;
    }
    

    正如您现在所拥有的那样,它们是您班级的package private members,并且在您实例化班级时被设置。

    【讨论】:

    • +1:是的,最好在需要时计算它们,以防它们在传递给构造函数后发生变化。
    • 我的值仍然为 0,就像我说的出于某种原因,当我尝试打印长度时,它返回 0,但我可以获得宽度、y3 和 y2 的值​​
    【解决方案2】:

    这段代码

    double width=x1-x2;
    double length=y3-y2;
    

    应该在你的构造函数中。

    和现在一样,它在构造函数之前执行,此时 x1,x2,y3,y2 仍为 0。

      double width;
      double length;
    
      public Triangle(Point point1, Point point2, Point point3) 
      { 
        x1=point1.getX();
        y1=point1.getY();
        x2=point2.getX();
        y2=point2.getY();
        x3=point3.getX();
        y3=point3.getY();
    
        // init width and length after x1,x2,y3,y2 are intialized
        width=x1-x2;
        length=y3-y2;
      }
    

    另一种方法是仅在需要时计算widthlength

      public double area() 
      { 
        double width=x1-x2;
        double length=y3-y2;
        return (length * width)/2; 
      }
    

    【讨论】:

    • @jacobohunter 对不起,这是一个错字。我的意思是它们应该只在构造函数中初始化。它们应该在它之外声明。
    • 是的,我能够实现这一点,但我的长度值仍然一无所获,我编辑并展示了如何使用随机双精度生成器计算我的点值,这可能是个问题吗?因为我得到了除长度之外的所有值,它不喜欢减去 y 值
    • @jacobohunter 首先,3 个随机点不一定构成一个三角形(可以在同一条线上))。其次,您的公式不适用于一般三角形。它假设 y1=y2 用于计算长度和高度。 length 应该是 p1 和 p2 之间的距离, height 应该是线 (p1,p2) 和点 p3 之间的距离。
    • Goodpoint 我知道 3 个随机点不一定会形成一个三角形,但我真的不知道该怎么做,这应该是一个基本的 java 程序教程。你有什么建议吗?
    • @jacobohunter 如果你想让你的代码工作,你必须对输入做出假设。 y1 必须等于 y2。否则,您必须使用不同的公式(例如,宽度为 sqrt((x1-x2)^2+(y1-y2)^2),长度更复杂 - 您应该谷歌搜索正确的公式)。跨度>
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2015-02-11
    • 1970-01-01
    • 2016-05-25
    • 2013-01-03
    相关资源
    最近更新 更多