已开启
计算机-集美大学-郁普程-罗文芳 #416
计算机-集美大学-郁普程-罗文芳 #416
已开启
gcw_tfONjo43创建于 6月30日
3 个文件变更+33-3
@@ -15,5 +15,8 @@ public class EvalButtonEntity <: ButtonEntity {
15 15 
16 public open func onPress(dynamicParam: DynamicParam) {16 public open func onPress(dynamicParam: DynamicParam) {
17 dynamicParam.resetSize(smallSize, bigSize)17 dynamicParam.resetSize(smallSize, bigSize)
18+ if (dynamicParam.resultText != "Error") {
19+ dynamicParam.expressionText = dynamicParam.resultText
20+ }
18 }21 }
19}22}
@@ -18,12 +18,27 @@ public class DynamicParam {
18 @Publish18 @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 = j28 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 }