前言:锻炼自己的思想,规范自己的编程思路。
问题:
设计一个类 Calculator 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时,它还应支持连续操作的方法链式调用。Calculator 类的构造函数应接受一个数字作为 result 的初始值。
你的 Calculator 类应包含以下方法:
add - 将给定的数字 value 与 result 相加,并返回更新后的 Calculator 对象。 subtract - 从 result 中减去给定的数字 value ,并返回更新后的 Calculator 对象。 multiply - 将 result 乘以给定的数字 value ,并返回更新后的 Calculator 对象。 divide - 将 result 除以给定的数字 value ,并返回更新后的 Calculator 对象。如果传入的值为 0 ,则抛出错误 "Division by zero is not allowed" 。 power - 将 result 的值乘以给定的数字 value ,并返回更新后的 Calculator 对象。 getResult - 返回 result 的值。 结果与实际结果相差在 10-5 范围内的解被认为是正确的。
示例:(放代码里面)
输入:actions = ["Calculator", "add", "subtract", "getResult"], values = [10, 5, 7]
输出:8
解释:
new Calculator(10).add(5).subtract(7).getResult() // 10 + 5 - 7 = 8
思路:
函数是一个名为 Calculator 的类。包含一个构造函数和多个方法,用于执行基本的数学运算。
构造函数接受一个参数 initialValue,它表示计算器的初始值。构造函数将 initialValue 赋值给 this.result,以便在类的其他方法中使用。
add 方法接受一个参数value,它表示要加到 result 上的值。方法将 value 加到 this.result 上,并返回 this 以支持链式调用。
subtract 方法接受一个参数value,它表示要从result 中减去的值。方法从 this.result 中减去 value,并返回 this以支持链式调用。
multiply 方法接受一个参数value,它表示要将 result 乘以的值。方法将 this.result 乘以 value,并返回 this 以支持链式调用。
divide 方法接受一个参数 value,它表示要将 result 除以的值。如果传入的值为 0,则抛出错误 “Division by zero is not allowed”。否则,方法将 this.result 除以 value,并返回 this以支持链式调用。
power 方法接受一个参数value,它表示要将 result 的值乘方的次数。方法使用 JavaScript 的内置函数 Math.pow() 将 this.result 的值乘方,并返回更新后的结果。然后返回this以支持链式调用。
最后,类还包含一个名为 getResult() 的方法,它返回当前的结果值。
基于上述思考,代码如下:
class Calculator {
constructor(initialValue) {
this.result = initialValue;
}
add(value) {
this.result += value;
return this;
}
subtract(value) {
this.result -= value;
return this;
}
multiply(value) {
this.result *= value;
return this;
}
divide(value) {
if (value === 0) {
throw new Error("Division by zero is not allowed");
}
this.result /= value;
return this;
}
power(value) {
this.result = Math.pow(this.result, value);
return this;
}
getResult() {
return this.result;
}
}
执行结果如下图: