查找多边形的周长



问题的描述在代码顶部的评论中给出。我得到的输出是NAN,而不是周长的整数值

/*
 * Implement a Polygon class with the following properties:
 * 1. A constructor that takes an array of integer side lengths.
 * 2. A 'perimeter' method that returns the sum of the Polygon's side lengths.
 */
class Polygon
{
    constructor(sides)
    {
        this.sides = sides;
    }
    perimeter()
    {
        var per = 0;
        for (var i = 0; i <= this.sides.length; i++)
        {
            per += this.sides[i];
        }
        return per;
    }
}

此代码运行以上代码:

const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());

<更改<=,因此您不会越过sides数组的界限:

for (var i = 0; i <= this.sides.length; i++)

for:

for (var i = 0; i < this.sides.length; i++)

您可以使用Reled总结您的侧面:

class Polygon {
  constructor(sides) {
      this.sides = sides;
  }
  perimeter() {
    return this.sides.reduce((sum, side) => sum + side, 0);
  }
}
const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());

for循环的极限超过数组末端。

for (var i = 0; i <= this.sides.length; i++)

大小length的数组将以length - 1作为最后一个索引。要解决此问题,请使用:

for (var i = 0; i < this.sides.length; i++)

其他答案是正确的,问题是i将在数组末端脱离一个,这会给您带来问题。这是一个问题的例证,该问题可能是由于使用循环在数组上迭代而引起的。i仅与您迭代的数组相关,并且很容易遇到我们在i和数组之间创建的关系的问题我们在代码中创建的。

因此,我建议使用reduce之类的东西。您也可以使用forEach并跟踪总和,但是reduce是迄今为止总和的最佳选择,因为它旨在采用某些东西并产生一个值。

这是看起来的外观:

class Polygon
{
    constructor(sides)
    {
        this.sides = sides;
    }
    perimeter()
    {
      return this.sides.reduce((prev, curr) => prev + curr, 0);
    }
}
const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());

最新更新