Java方法错误|答案包括在内

时间:2017-04-28 11:31:49

标签: java

请帮我恢复理智!请看下面的程序。我打电话给这个程序正确运行。我正在寻找的预期结果是:

triangle 0, area = 4.0
triangle 1, area = 10.0
triangle 2, area = 18.0
triangle 3, area = 28.0

现在,我被困住的部分是在while循环时t[x].setArea()被调用。我无法克服当前编写该方法的方式。 出于某种原因,我认为应该这样写:

void setArea() {      
    t[x].area = (t[x].height * t[x].length)/2;
  }

而不是目前的编写方式:

 void setArea() {
    area = (height * length)/2;

因为它是如何知道您指的是那个特定的t [x]而没有像这样直接调用它

t[x].area  t[x].height  t[x].length

请让我知道你的想法。非常混乱。

  class Triangle {
  double area;
  int height;
  int length;

  public static void main(String[] args) {
    int x = 0;
    Triangle [] ta = new Triangle[4];

    while (x < 4) {
      ta[x] = new Triangle();
      ta[x].height = (x + 1) *2;
      ta[x].length = x + 4;
      ta[x].setArea();

      System.out.print("triangle "+x+", area");
      System.out.println(" = "+ta[x].area);
      x = x + 1;
    }
    int y = x;
    x = 27;
    Triangle t5 = ta[2];
    ta[2].area = 343;
    System.out.print("y = " + y);
    System.out.println(", t5 area = "+ t5.area);
  }

  void setArea() {
    area = (height * length)/2;
  }
}

3 个答案:

答案 0 :(得分:1)

如果你使用两个类,你需要做的事情会更清楚:

三角形对象:

public class Triangle {
    int height;
    int length;
    double area;

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }




    void setArea() {
        area = (height * length) / 2;
    }
}

主要课程:

public class X {

    public static void main(String[] args) {
        int x = 0;
        Triangle[] ta = new Triangle[4];

        while (x < 4) {
            ta[x] = new Triangle();
            ta[x].height = (x + 1) * 2;
            ta[x].length = x + 4;
            ta[x].setArea();

            System.out.print("triangle " + x + ", area");
            System.out.println(" = " + ta[x].area);
            x = x + 1;
        }
        int y = x;
        x = 27;
        Triangle t5 = ta[2];
        ta[2].area = 343;
        System.out.print("y = " + y);
        System.out.println(", t5 area = " + t5.area);
    }
}

现在您已经看到您无法再访问数组了。

但我建议不要存放该区域。

答案 1 :(得分:0)

方法setArea()Triangle - 类中定义,这意味着Triangle的所有实例都有自己的此方法版本,引用它自己的字段变量(即{ {1}},areaheight)。

因此,当您致电length时,ta[x].setArea();方法会隐式地知道变量是指setArea的变量。

答案 2 :(得分:-1)

在java中,每当调用类的方法时,都会传递此指针。所以你不需要这样做:   t [x] .area =(t [x] .height * t [x] .length)/ 2

相反,已经写的是   area =(height * length)/ 2

工作正常,并且因为这个指针在幕后传递,所以代码可以正常工作并更新所需的实例。