当我在方法中计算时无法得到相同的结果
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。我也喜欢数学。
我正在学习方法、类、对象和参数。并决定制作我自己的程序,但是当我使用参数、对象等时我得到了错误的结果。 这是代码:
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。我也喜欢数学。