如何在另一个方法中使用get方法中的变量?

时间:2018-03-16 18:46:01

标签: java methods scope

下面我已经包含了我正在处理的代码。

我需要创建一个需要3个点的类,并且可以返回边长和这些点的角度。

我在${match}/videos方法遇到问题。我试图在那里调用三种方法computeAngles和side2和3长度。但我有点麻烦。

尚未完成。我仍然需要获得angle1和angle3,但我想在继续之前找出角度2。

getSide1_Length

2 个答案:

答案 0 :(得分:0)

首先,您应该重写构造函数

p1 = p1;

我认为您要做的是将字段设置为构造函数的参数。你在那里做的是将参数放入参数。 现在有两个常见的解决方案来解决这个问题。你可以重命名你的参数或者放置一个"这个。"在左边p1。

this.p1 = p1; // this.p1 is the field | p1 is the parameter

您的 setPoint()方法也需要一些工作。您要做的是将字段设置为参数的值。您每次都要创建新对象。

this.p1 = p1; // this.p1 is the field | p1 is the parameter

您的 getSide()方法不应该使用任何参数,因为它们只是根据您存储在字段中的点返回边长。所以将它们改为:

public double getSide1_Length()
{
    double side1 = Math.sqrt(((Math.pow((p2.x - p1.x), 2)) + Math.pow((p2.y - p1.y), 2)));

    return side1;
}

对于 computeAngle()方法,请查看此处:https://www.mathsisfun.com/algebra/trig-solving-sss-triangles.html

根据该链接,您应该执行以下操作:

private double computeAngles()
{
    double side1 = getSide1_Length(side1);
    double side2 = getSide2_Length(side2);
    double side3 = getSide3_Length(side3);

    int angle2 = Math.acos(((Math.pow(side3,2)) + (Math.pow(side2,2)) - (Math.pow(side1,2)) / (2 * (side3 * side2))));

    return angle2;
}

答案 1 :(得分:0)

我会稍微改变一下。

getSide1getSide2getSide3:所有这些都做同样的事情,唯一的区别是计算中使用的点。因此,您应该将它们更改为单个方法,该方法可以获得2分并进行数学运算:

public double getSideLength(Point a, Point b)
{
    return Math.sqrt(((Math.pow((a.x - b.x),2)) + Math.pow((a.y - b.y),2)));
}

然后,要计算角度,请注意:

private double computeAngles(double angle1, double angle2, double angle3)

这些angle变量与开头声明的变量相同(带有private修饰符的变量) - check here以获取详细信息。< / p>

要正确计算角度,请调用getSideLength 3次以获取3个边的长度,然后对边进行相应的计算:

private void computeAngles() {
    double side1 = getSideLength(p1, p2);
    double side2 = getSideLength(p2, p3);
    double side3 = getSideLength(p3, p1);

    angle2 = Math.asin(((Math.pow(side3,2)) - (Math.pow(side2,2)) - (Math.pow(side1,2)) / (-2 * (side2 * side1))));
    angle1 = // do the same math using the respective sides
    angle3 = // do the same math using the respective sides
}

由于获得角度的数学是相同的(只有使用的边改变了),你也可以为它创建一个方法:

private double getAngle(double sideA, double sideB, double sideC) {
    return Math.asin(((Math.pow(sideC, 2)) - (Math.pow(sideB, 2)) - (Math.pow(sideA, 2)) / (-2 * (sideB * sideA))));
}

然后你计算出那样的角度:

private void computeAngles() {
    double side1 = getSideLength(p1, p2);
    double side2 = getSideLength(p2, p3);
    double side3 = getSideLength(p3, p1);

    angle1 = getAngle(side1, side2, side3);
    angle2 = // call getAngle changing the sides order accordingly
    angle3 = // call getAngle changing the sides order accordingly
}