我正在尝试编写用户输入三角形两条腿的代码,程序将计算斜边,面积和周长。但是,我的所有输出都是0。 这是代码:
package practice;
public class RightTri {
double leg1;
double leg2;
double hypotenuse;
double Area;
double Perimeter;
public RightTri() {
leg1=0;
leg2=0;
hypotenuse=0;
}
public double getArea() {
double Area= leg1*leg2*0.5;
return Area;
}
public double getHypotenuse() {
double Hypotenuse=Math.sqrt(Math.pow(leg1, 2.0)+Math.pow(leg2, 2.0));
return Hypotenuse;
}
public double getPerimeter() {
double Perimeter= leg1+leg2+hypotenuse;
return Perimeter;
}
}
package practice;
import javax.swing.JOptionPane;
public class RightTriTest {
public static void main (String args[]) {
RightTri Test=new RightTri();
String a= JOptionPane.showInputDialog ("Leg 1?");
Double leg1=Double.parseDouble(a);
String b= JOptionPane.showInputDialog ("Leg 2?");
Double leg2=Double.parseDouble(b);
System.out.println("The hypotenuse is " +Test.getHypotenuse());
System.out.println("The area is " +Test.getArea());
System.out.println("The perimeter is " +Test.getPerimeter());
}
}
答案 0 :(得分:1)
public RightTri()
{
leg1=0;
leg2=0;
hypotenuse=0;
}
你的no-arg构造函数中的所有值都是0
您应该使用像这样的构造函数
public RightTri(double leg1, double leg2)
{
this.leg1 = leg1;
this.leg2 = leg2;
}
然后在主要做这样的事情
String a= JOptionPane.showInputDialog ("Leg 1?");
Double leg1=Double.parseDouble(a);
String b= JOptionPane.showInputDialog ("Leg 2?");
Double leg2=Double.parseDouble(b);
RightTri Test = new RightTri(leg1, leg2);
System.out.println("The hypotenuse is " +Test.getHypotenuse());
System.out.println("The area is " +Test.getArea());
System.out.println("The perimeter is " +Test.getPerimeter());
答案 1 :(得分:1)
您已将三角形的值定义为0
:
public RightTri()
{
leg1=0;
leg2=0;
hypotenuse=0;
}
你永远不会改变任何一个,所以当你拨打getArea()
...
public double getArea()
{
double Area= leg1*leg2*0.5;
return Area;
}
...您获得0
因为0 * 0 * 0.5
为零。
您似乎将main
方法中的局部变量与三角形对象中的局部变量混淆了。尝试制作一个更合理的构造函数:
public RightTri(double leg1, double leg2) {
this.leg1 = leg1;
this.leg2 = leg2;
}
从main
调用它,例如:
RightTri a = new RightTri(4, 6);
System.out.println(a.getArea());
或者,由于字段不是private
,您可以直接从main
访问它们:
Test.leg1 = 4.5;
但这对Java来说不是很惯用,所以我建议使用构造函数。
答案 2 :(得分:0)
这是因为您在“Test”对象中未分配为leg1和leg2获取的值。我建议你在你的班级RightTri中创建几个setter:
public void setLeg1(Double leg1){
this.leg1 = leg1;
}
public void setLeg2(Double leg2){
this.leg2 = leg2;
}
然后从RightTriTest分配值:
public static void main (String args[]) {
RightTri Test=new RightTri();
String a= JOptionPane.showInputDialog ("Leg 1?");
Double leg1=Double.parseDouble(a);
Test.setLeg1(leg1);
String b= JOptionPane.showInputDialog ("Leg 2?");
Double leg2=Double.parseDouble(b);
Test.setLeg2(leg2);
System.out.println("The hypotenuse is " +Test.getHypotenuse());
System.out.println("The area is " +Test.getArea());
System.out.println("The perimeter is " +Test.getPerimeter());
}
答案 3 :(得分:0)
你自己说过:构建零三角形是没有意义的。为什么不完全删除默认(即无参数)构造函数?
改为提供:
public RightTri(double leg1, double leg2)
{
this.leg1 = leg1;
this.leg2 = leg2;
this.hypotenuse = Math.sqrt(leg1 * leg1 + leg2 * leg2);
}
请注意,我在构造函数中购买了斜边计算。您甚至可能希望将Area
和Perimeter
设置在其中:然后您可以保证对象在构造上处于良好状态,但代价是几乎可以忽略不计的开销。当然,您需要调整各种get...
函数。
我还放弃了pow
个功能。使用2.0
作为参数的方式将调用一个缓慢的计算:2的幂可以更快地自己乘以数字。