已开启
计算机-集美大学-郁普程-罗文芳 #416
gcw_tfONjo43创建于 6月30日
计算机-集美大学-郁普程-罗文芳 #416
已开启
共 3 个文件变更+33-3
| @@ -18,12 +18,27 @@ public class DynamicParam { | |||
| 18 | @Publish | 18 | @Publish |
| 19 | public var resultText: String = "0" | 19 | public var resultText: String = "0" |
| 20 | 20 | ||
| 21 | + public static let maxExpressionLength: Int64 = 20 | ||
| 22 | + | ||
| 21 | public func push(text: String) { | 23 | public func push(text: String) { |
| 24 | + if (expressionText.size >= maxExpressionLength) { | ||
| 25 | + return | ||
| 26 | + } | ||
| 22 | setExpression(if (expressionText == "0") { text } else { expressionText + text }) | 27 | setExpression(if (expressionText == "0") { text } else { expressionText + text }) |
| 23 | } | 28 | } |
| 24 | 29 | ||
| 25 | public func pop() { | 30 | public func pop() { |
| 26 | - setExpression(if (expressionText == "0" || expressionText.isEmpty()) {"0"} else { expressionText[0..expressionText.size-1] }) | 31 | + if (expressionText == "0" || expressionText.isEmpty()) { |
| 32 | + return | ||
| 33 | + } | ||
| 34 | + let tokens = CalculateUtils.tokenize(expressionText) | ||
| 35 | + if (tokens.isEmpty()) { | ||
| 36 | + expressionText = "0" | ||
| 37 | + return | ||
| 38 | + } | ||
| 39 | + tokens.remove(tokens.size - 1) | ||
| 40 | + let newExpression = tokens.join("") | ||
| 41 | + setExpression(if (newExpression.isEmpty()) {"0"} else { newExpression }) | ||
| 27 | } | 42 | } |
| 28 | 43 | ||
| 29 | public func setExpression(expression: String) { | 44 | public func setExpression(expression: String) { |
| @@ -18,10 +18,16 @@ public class CalculateUtils { | |||
| 18 | while (j < n && StringUtils.isDigit(expression[j])) { | 18 | while (j < n && StringUtils.isDigit(expression[j])) { |
| 19 | j++ | 19 | j++ |
| 20 | } | 20 | } |
| 21 | + if (j < n && expression[j] == '.') { | ||
| 22 | + j++ | ||
| 23 | + while (j < n && StringUtils.isDigit(expression[j])) { | ||
| 24 | + j++ | ||
| 25 | + } | ||
| 26 | + } | ||
| 21 | tokens.append(expression[i..j]) | 27 | tokens.append(expression[i..j]) |
| 22 | i = j | 28 | i = j |
| 23 | } else if ('+-*x/÷()'.indexOf(ch) != None) { | 29 | } else if ('+-*x/÷()'.indexOf(ch) != None) { |
| 24 | - tokens.append(if ('÷'.indexOf(ch) != None) { i++; '/' } else { '${Rune(ch)}' }) | 30 | + tokens.append(if ('÷'.indexOf(ch) != None) { '/' } else { '${Rune(ch)}' }) |
| 25 | i++ | 31 | i++ |
| 26 | } else { | 32 | } else { |
| 27 | i++ | 33 | i++ |
| @@ -79,7 +85,13 @@ public class CalculateUtils { | |||
| 79 | case '+' => stack.push(a + b); | 85 | case '+' => stack.push(a + b); |
| 80 | case '-' => stack.push(a - b); | 86 | case '-' => stack.push(a - b); |
| 81 | case '*' | 'x' => stack.push(a * b); | 87 | case '*' | 'x' => stack.push(a * b); |
| 82 | - case _ => stack.push(a / b); // '/' | '÷' | 88 | + case '/' | '÷' => { |
| 89 | + if (b == 0.0) { | ||
| 90 | + return "Error" | ||
| 91 | + } | ||
| 92 | + stack.push(a / b) | ||
| 93 | + } | ||
| 94 | + case _ => stack.push(a / b); | ||
| 83 | } | 95 | } |
| 84 | } | 96 | } |
| 85 | } | 97 | } |