当我在方法中计算时无法得到相同的结果

Can't get the same result when I calculate in methods

我正在学习方法、类、对象和参数。并决定制作我自己的程序,但是当我使用参数、对象等时我得到了错误的结果。 这是代码:

class Resavanje {

    double temeA, temeB, temeC, povrsinaS;

    public Resavanje(double aX, double aY, double bX, double bY, double cX, double cY) {
        // Izracunavanje temena.
        temeA = Math.sqrt(Math.pow(bX - cX, 2) + Math.pow(bY - cY, 2));
        temeB = Math.sqrt(Math.pow(cX - aX, 2) + Math.pow(cY - aY, 2));
        temeC = Math.sqrt(Math.pow(aX - bX, 2) + Math.pow(aY - bY, 2));
    }

    double uzmiS() {
        return ((temeA + temeB + temeC) / 2);
    }

    // Povrsina trougla sa temenima
    double uzmiPovrsinuSaTemenima() {
        return Math.sqrt(povrsinaS * (povrsinaS - temeA) * (povrsinaS - temeB) * (povrsinaS - temeC));
    }

}

public class PoblemTrougla {

    public static void main(String[] args) {
        Resavanje objekat = new Resavanje(1, 1, 5, 2, 3, 6);
        System.out.println(objekat.uzmiPovrsinuSaTemenima());
    }

}

当我调用方法 objekat.uzmiPovrsinuSaTemenima() 时,它应该显示:9.000...7 但结果是 -0.0

如果我在 main 方法中使用它:

double s, p, a, b, c;
a = objekat.temeA;
b = objekat.temeB;
c = objekat.temeC;
s = (a + b + c) / 2;

p = Math.sqrt(s * (s - a) * (s - b) * (s - c));

我得到结果 9.000...7,这是正确的结果。为什么我在methods中计算的结果不一样?

double uzmiS()
{
    return ((temeA + temeB + temeC)/2);
}

这个函数永远不会 运行,它的结果是:s = (a+b+c)/2; 你的计算永远不会 运行ning.

尝试 运行宁这样的东西:

povrsinaS = uzmiS(temeA, temeB, temeC);

在你 运行 你的函数之前 uzmiPovrsinuSaTemenima()

为清楚起见已更新

所以,这条语句:

objekat.uzmiPovrsinuSaTemenima()

告诉您的计算机 运行 这个:

double uzmiPovrsinuSaTemenima() {
     return Math.sqrt(povrsinaS *(povrsinaS-temeA)*(povrsinaS - temeB)*(povrsinaS- temeC));
}

代码。你有一个类似于那个的方法:

double uzmiS() {
    return ((temeA + temeB + temeC)/2);
}

您的计算机永远不会 运行 因为没有调用它! 执行像 povrsinaS = uzmiS(temeA, temeB, temeC); 这样的命令会告诉您的计算机“嘿,我要 运行 uzimiS 函数和 return 那个值到变量 povrsinaS.

这相当于在您提供的第二个示例中执行s = (a+b+c)/2;这一步。

基本上你应该从 main 方法开始跟踪,它调用一个构造函数(有 6 个参数)

Resavanje objekat = new Resavanje(1, 1, 5, 2, 3, 6);

它会计算你的 objekat 对象的 3 个属性,但它永远不会计算它们的平均值(在你的例子中是 povrsinaS 属性)。因此 uzmiPovrsinuSaTemenima 方法将在 povrsinaS 值为 0 时执行。要处理此问题,您可以将此行添加到构造函数中:

povrsinaS = uzmiS(temeA, temeB, temeC);

或在您的 uzmiPovrsinuSaTemenima 方法中设置它:

double uzmiPovrsinuSaTemenima() {
    povrsinaS = uzmiS(temeA, temeB, temeC); 
    return Math.sqrt(povrsinaS *(povrsinaS-temeA)*(povrsinaS - temeB)*(povrsinaS- temeC));
}

它将为 uzmiPovrsinuSaTemenima 提供 povrsinaS 的值。

添加这一行

povrsinaS = this.uzmiS();

方法 uzmiPovrsinuSaTemenima() 像这样:

class Resavanje {

    double temeA, temeB, temeC, povrsinaS;

    public Resavanje(double aX, double aY, double bX, double bY, double cX, double cY) {
        // Izracunavanje temena.
        temeA = Math.sqrt(Math.pow(bX - cX, 2) + Math.pow(bY - cY, 2));
        temeB = Math.sqrt(Math.pow(cX - aX, 2) + Math.pow(cY - aY, 2));
        temeC = Math.sqrt(Math.pow(aX - bX, 2) + Math.pow(aY - bY, 2));
    }

    public double uzmiS() {
        return ((temeA + temeB + temeC) / 2);
    }

    // Povrsina trougla sa temenima
    double uzmiPovrsinuSaTemenima() {
        povrsinaS = this.uzmiS();           // <------ Add this line
        return Math.sqrt(povrsinaS * (povrsinaS - temeA) * (povrsinaS - temeB) * (povrsinaS - temeC));
    }

}

您的程序将运行,return 真实结果:

9.000000000000007

P/S:这是三角形中的Heron's formula。我也喜欢数学。