【问题标题】:How can I pass the value of a variable in one method into another method?如何将一种方法中的变量值传递给另一种方法?
【发布时间】:2014-07-05 18:22:09
【问题描述】:

我正在尝试创建一个代码来设置三角形的三个边,然后计算三角形的周长、三角形的面积,并确定三角形是否钝角。我已经完成了所有的代码,并且没有错误出现。当我运行程序时,什么也没有发生。没有输出,我看不到我创建的任何方法中发生了什么。如果有人能帮我找出我哪里出错了,将不胜感激。

代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package triangle;

import java.lang.Math;
/**
 *
 * @author Dan
 */
public class Triangle 
{
    private double side1;
    private double side2;
    private double side3;
    private double Area;
    private double Perim;

/**
 * Create Triangle object
 * @param sideA for side one
 * @param sideB for side two
 * @param sideC for side three
 */
    public Triangle(double sideA, double sideB, double sideC)
    {

        if (sideA >= 0 || sideB >= 0 || sideC >= 0)
            System.exit(0);
        else
            side1 = sideA;
            side2 = sideB;
            side3 = sideC;
            System.out.println("The chosen values for each side are:");
            System.out.println("Side 1: " +side1);
            System.out.println("Side 2: " +side2);
            System.out.println("Side 3: " +side3);
            System.out.println();
    }

    /**
     * Create a method for calculating the perimeter
     * of a triangle
     */
    public double getPerimeter()
    {
        Perim = side1+side2+side3;
        System.out.println("The perimeter of the triangle is: " +Perim);
        System.out.println();
    }

    /**
     * Create a method for calculating the area
     * of a triangle
     */
    public void getArea()
    {
      Area =  Math.sqrt((Perim/2)*((Perim/2)-side1)*((Perim/2)-side2)*((Perim/2)-side3));
      System.out.println("The Area of the triangle is: " +Area );
      System.out.println();
    }
    /**Create a method to determine if a triangle is obtuse or not
     */
    public void isObtuse()
    {
        /**
         * determines if the square of two sides is less than the square of the remaining side
         */
        if ((Math.pow(side1,2) + Math.pow(side2,2) < Math.pow(side3,2)) ||
            (Math.pow(side3,2) + Math.pow(side1,2) < Math.pow(side2,2)) ||
            (Math.pow(side3,2) + Math.pow(side2,2) < Math.pow(side1,2)))
            System.out.println("The triangle is obtuse: 1");
        else
            System.out.println("The triangle is not obtuse: 0");

    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
        Triangle tri = new Triangle(10,20,30);
        System.out.println(tri.Perim);
        System.out.println(tri.Area);
        tri.isObtuse();

    }

}

【问题讨论】:

  • 你没有使用你创建的周长和面积的方法吗?
  • @TheDude 我希望他/她习惯于 C# 属性。
  • 怎么没有编译错误,double getPerimeter() 没有返回任何东西。
  • 您的方法名称与它们的行为不同步。 isObtusegetAreareturn void,正如他们的名字所暗示的那样,返回布尔值和数值。

标签: java variables methods


【解决方案1】:

Triangle 实例被创建时,构造函数 被调用。您的构造函数中的以下代码:

if (sideA >= 0 || sideB >= 0 || sideC >= 0) {
    System.exit(0); // exit program
}

当三角形的任何边为&gt;= 0 时,将完成程序。

|| 运算符是逻辑OR,这意味着如果任何条件为true,则整个表达式将为true

所以,如果三角形边是102030。由于它们是正 (&gt;=0) 值,因此程序将在达到条件时结束。

另外,你应该在方法getPerimeter中添加一个return语句,因为它的返回类型是double,而不是void

return Perim; 

【讨论】:

  • 5 秒的调试就足以轻松找到它。
  • 这也只是问题的一部分。
【解决方案2】:

这些行没有任何意义:

if (sideA >= 0 || sideB >= 0 || sideC >= 0)
        System.exit(0);

这表示“如果 sideA、sideB 或 sideC 大于 0,则退出程序。”这不适用于您传递给构造函数的三个值 (10,20,30)。也许您想检查是否小于或等于零 (&lt;= 0)?

之后,您需要调用 getPerimeter()getArea() 方法,以便在类的 AreaPerim 字段中具有值。您的 getPerimeter() 方法不必返回任何内容,因此方法声明中的 double 是不必要的,因为您不返回任何内容。它可以只是public void getPerimeter()

旁注:字段名称通常以小写字母开头并使用驼峰式。

【讨论】:

    【解决方案3】:

    首先,一些变量必须以某种方式初始化。例如,我通常做的是这样的:

    //...
    private double side1;
    private double side2;
    private double side3;
    private double Area;
    private double Perim;
    
    public Triangle(double sideA, double sideB, double sideC){
        Area = 0.0;
        Perim = 0.0;
    //...
    }
    

    这更合适,因为您在下面的方法中使用了这些变量。 现在,您的声明 if (sideA &gt;= 0 || sideB &gt;= 0 || sideC &gt;= 0) System.exit(0); 实际上是“如果至少有一个边是正数,则退出程序。”我建议您将其更改为

    if (sideA <= 0 || sideB <= 0 || sideC <= 0) System.exit(0);
    else
    //...
    

    改变那些小事,让我知道。

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多