为什么我的三角形区域/周长为0?

时间:2013-12-15 01:07:05

标签: java swing

我正在尝试编写用户输入三角形两条腿的代码,程序将计算斜边,面积和周长。但是,我的所有输出都是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());   
    }
}

4 个答案:

答案 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);
}

请注意,我在构造函数中购买了斜边计算。您甚至可能希望将AreaPerimeter设置在其中:然后您可以保证对象在构造上处于良好状态,但代价是几乎可以忽略不计的开销。当然,您需要调整各种get...函数。

我还放弃了pow个功能。使用2.0作为参数的方式将调用一个缓慢的计算:2的幂可以更快地自己乘以数字。