基本运算:加、减、乘、除。

基本运算:加、减、乘、除。

当然可以!我们可以实现一个更复杂的计算器,支持以下功能:

基本运算:加、减、乘、除。

链式调用:支持连续操作。

优先级运算:支持带括号的表达式解析,处理运算符优先级。

错误处理:处理除零错误和无效表达式。

科学计算功能:例如平方根、幂运算等。

下面是一个示例实现:

swift

import Foundation

// 定义计算器错误类型

enum CalculatorError: Error {

case divisionByZero

case invalidExpression

}

// 定义计算器类

class Calculator {

private var currentValue: Double = 0.0

// 加法

@discardableResult

func add(_ value: Double) -> Calculator {

currentValue += value

return self

}

// 减法

@discardableResult

jrhz.info

func subtract(_ value: Double) -> Calculator {

currentValue -= value

return self

}

// 乘法

@discardableResult

func multiply(_ value: Double) -> Calculator {

currentValue *= value

return self

}

// 除法

@discardableResult

func divide(_ value: Double) -> Calculator {

if value == 0 {

print("错误:除数不能为零")

return self

}

currentValue /= value

return self

}

// 平方根

@discardableResult

func squareRoot() -> Calculator {

if currentValue < 0 {

print("错误:无法计算负数的平方根")

return self

}

currentValue = sqrt(currentValue)

return self

}

// 幂运算

@discardableResult

func power(_ exponent: Double) -> Calculator {

currentValue = pow(currentValue, exponent)

return self

}

// 获取当前值

func getValue() -> Double {

return currentValue

}

// 重置计算器

func reset() {

currentValue = 0.0

}

// 解析和计算表达式

func evaluateExpression(_ expression: String) throws -> Double {

// 使用 NSExpression 来解析简单的数学表达式

let nsExpression = NSExpression(format: expression)

guard let result = nsExpression.expressionValue(with: nil, context: nil) as? Double else {

throw CalculatorError.invalidExpression

}

return result

}

}

// 使用计算器

let calculator = Calculator()

// 链式调用示例

let result1 = calculator.add(5).multiply(2).subtract(3).getValue()

print("链式调用结果: \(result1)") // 输出: 链式调用结果: 7.0

// 重置计算器

calculator.reset()

// 表达式解析示例

do {

let result2 = try calculator.evaluateExpression("3 + 5 * 2 - 4 / 2")

print("表达式解析结果: \(result2)") // 输出: 表达式解析结果: 11.0

} catch CalculatorError.divisionByZero {

print("错误:除数不能为零")

} catch CalculatorError.invalidExpression {

print("错误:无效的表达式")

} catch {

print("未知错误: \(error)")

}

// 科学计算功能示例

calculator.reset()

calculator.add(16).squareRoot()

print("平方根结果: \(calculator.getValue())") // 输出: 平方根结果: 4.0

calculator.reset()

calculator.add(2).power(3)

print("幂运算结果: \(calculator.getValue())") // 输出: 幂运算结果: 8.0

// 除零错误示例

calculator.reset()

let _ = calculator.divide(0) // 输出: 错误:除数不能为零

// 无效表达式示例

do {

let _ = try calculator.evaluateExpression("3 + 5 * 2 - 4 /") // 这里会抛出无效表达式错误

} catch {

print("捕获到错误: \(error)") // 输出: 捕获到错误: invalidExpression

}

代码说明

链式调用:

每个运算方法(add、subtract、multiply、divide、squareRoot、power)都返回 self,允许连续调用。

科学计算功能:

squareRoot 方法计算当前值的平方根。

power 方法计算当前值的幂。

表达式解析:

使用 NSExpression 来解析和计算字符串表达式。NSExpression 支持基本的数学运算和括号,能够处理运算符优先级。

错误处理:

使用 CalculatorError 枚举来定义可能的错误类型。

在 divide 方法中,检查除数是否为零,并在这种情况下打印错误消息。

在 squareRoot 方法中,检查当前值是否为负数,并在这种情况下打印错误消息。

在 evaluateExpression 方法中,使用 do-catch 块来捕获和处理解析错误。

重置功能:

reset 方法将计算器的当前值重置为零。

通过这种方式,你可以创建一个功能更强大、更灵活的计算器,支持链式调用、表达式解析、科学计算和错误处理。

特别声明:[基本运算:加、减、乘、除。] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

22年后向太爆『张国荣』坠楼细节!最后一通电话否认抑郁,谁在说谎(向太颜值)

死亡证明上刺眼的&quot;Depression&quot;单词,与哥哥电话里那句轻快的&quot;我没病&quot;形成魔幻对撞——这哪是病历本? 当各个平台争论他到底死于抑郁还是现实重压时,或许答案早藏在

22年后向太爆『张国荣』坠楼细节!最后一通电话否认抑郁,谁在说谎(向太颜值)

PMJ05J支路绝缘监测单元:精准监测,为电源系统绝缘安全筑牢防线》(绝缘支杆型号)

通过对每一路支路的绝缘状况进行实时监测,可以及时发现潜在的绝缘故障,为系统的安全运行提供有力保障。同时,它具备隔离RS485通讯接口,能够将检测到的信息准确、稳定地传送给主监控,为电源系统的管理和故障告警处理…

《<strong>PMJ05J支路绝缘监测单元:精准监测,为电源系统绝缘安全筑牢防线</strong>》(绝缘支杆型号)

吴越:我把他当自己未来丈夫,他却把我当做学校,终究还是错付了

那会儿,剧组其他人都看出了蒋勤勤对陈建斌的痴心暗恋,但谁也没想到,这个曾经最不受重视的小姑娘,竟会一不小心就把陈建斌从吴越身边勾引走了。 至于曾给吴越带来那么多痛苦和不安的陈建斌和蒋勤勤,现在他们的生活究竟…

吴越:我把他当自己未来丈夫,他却把我当做学校,终究还是错付了

代尔塔103008耳罩真能防噪音?工厂工人必备的降噪神器揭秘!(代尔塔口罩怎么样)

代尔塔103008专业隔音耳罩是工业领域广受认可的降噪装备,具备高达32dB的降噪等级,适用于高噪声环境如机械加工、金属锻造、建筑工地等场景。它采用轻量化设计、可调节头梁和舒适记忆棉耳垫,长时间佩戴无压迫感。本文详解其原理、适用人群、选购要

代尔塔103008耳罩真能防噪音?工厂工人必备的降噪神器揭秘!(代尔塔口罩怎么样)

北京火车时刻表怎么查?最新时刻表+购票攻略全解析🔥(北京到高碑店火车时刻表)

想查北京火车时刻表却不知从哪下手?别急!本文手把手教你如何快速、准确获取北京各大火车站(北京站、北京西站、北京南站等)的实时列车时刻表,涵盖高铁、普速、城际等多种车次。还附赠实用购票技巧、热门线路推荐与避坑指南,让你轻松规划出行,不再错过班

北京火车时刻表怎么查?最新时刻表+购票攻略全解析🔥(北京到高碑店火车时刻表)