Java方法错误|包含答案

Java方法错误|包含答案,java,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 = (

请帮我恢复理智!请看下面的节目。这个程序在我调用它时运行正常。我期待的预期结果是:

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].area  t[x].height  t[x].length
因为它怎么知道你指的是特定的t[x],而不是像这样直接调用它

 void setArea() {
    area = (height * length)/2;
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;
  }
}
类三角形{
双区;
内部高度;
整数长度;
公共静态void main(字符串[]args){
int x=0;
三角形[]ta=新三角形[4];
而(x<4){
ta[x]=新三角形();
ta[x]。高度=(x+1)*2;
ta[x]。长度=x+4;
ta[x].setArea();
系统输出打印(“三角形”+x+”,面积);
System.out.println(“=”+ta[x].面积);
x=x+1;
}
int y=x;
x=27;
三角形t5=ta[2];
ta[2],面积=343;
系统输出打印(“y=”+y);
System.out.println(“,t5区域=“+t5区域”);
}
void setArea(){
面积=(高度*长度)/2;
}
}

在java中,每当调用类的方法时,都会传递该指针。因此,您无需执行以下操作: t[x]。面积=(t[x]。高度*t[x]。长度)/2

 void setArea() {
    area = (height * length)/2;
t[x].area  t[x].height  t[x].length
而是已经写好的东西,即。 面积=(高度*长度)/2

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

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

如果您使用两个类,您需要做的事情将更加清楚:

三角形对象:

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);
    }
}
公共类X{
公共静态void main(字符串[]args){
int x=0;
三角形[]ta=新三角形[4];
而(x<4){
ta[x]=新三角形();
ta[x]。高度=(x+1)*2;
ta[x]。长度=x+4;
ta[x].setArea();
系统输出打印(“三角形”+x+”,面积);
System.out.println(“=”+ta[x].面积);
x=x+1;
}
int y=x;
x=27;
三角形t5=ta[2];
ta[2],面积=343;
系统输出打印(“y=”+y);
System.out.println(“,t5区域=“+t5区域”);
}
}
现在您可以看到,您不再有权访问阵列

但是我建议不要存储区域。

方法
setArea()
是在
Triangle
-类中定义的,这意味着
Triangle
的所有实例都有自己的方法版本,引用自己的字段变量(即
area
height
length


因此,当您调用
ta[x].setArea()时
setArea
方法将隐式地知道变量是指
ta[x]
的变量

如果将主方法移动到另一个类中,可能会更清楚:setArea()是三角形对象的方法。它总是属于一个特定的三角形,并且不知道主方法中的三角形数组是否存在。您不应该存储该区域。您应该在一个方法getArea()@ohgodspider中存储高度和长度并计算面积,我目前正在学习“头先Java”,他们就是这样做的。也许当我深入阅读这本书时,它会把它转移到自己的课堂上。我想知道是否通过调用方法:ta[x].setArea()。方法内部假设使用ta[x]。区域…ta[x]。内部长度?谢谢你,伙计@jens是的,我不应该存储面积…但我的问题是,当面积在内部没有ta[x].length和ta[x].width时,如何计算它知道使用哪个高度和长度。方法内部的那些函数假定在内部使用ta[x].area…ta[x].length,因为我们已经使用ta[x].setArea()调用了它-感谢you@rnd809ta[x].setArea()调用ta[x]的setArea()方法。正如我已经说过的,三角形本身不知道或者需要知道它是一个数组。但它当然知道自己的属性(高度、长度)。用外行的话来说,你所做的是在ta[x]告诉三角形:“嘿,你的三角形,设置你的面积!”三角形本身会回答“好的,我只是把我的高度乘以长度,然后把它保存在面积里。”好的,我明白了。非常感谢。我没有投你反对票。。。让我投票赞成。非常感谢你。事实上,我只是想投赞成票,说我没有足够的票数去投票。所以,我没有投你反对票。没问题:)。谢谢!从另一个角度来看,就这么多了!非常感谢你!出于某种原因,我正在使用的书是这样写的。但我现在明白了。谢谢大家!@rnd809如果我的回答对你有帮助,请随意接受