【发布时间】:2020-12-17 23:46:43
【问题描述】:
我正在尝试制作一个计算器应用程序,并且我需要能够在有人第二次按下运算符(+,*,-,/)后获得最后一个值(第一个值保存时没有问题,因为它是屏幕上唯一的数字)。 所以如果屏幕顶部有类似 (222 * 3333 / 12) 的东西,我需要得到 12。一旦我学会了如何做到这一点,我就可以弄清楚如何保存以前的数字/总和,然后在下一个数字(虽然我还没有制作那部分)。 我知道这是一种笨拙的做事方式,任何建议都会受到赞赏。 因此,如果我使用 substringAfterLast() 并在其中插入一个运算符,我可以获取这个数字,但是,如果混合使用多个运算符(如 222 * 3333 / 12),我的 y 变量(见下文)只会显示“222 * 3333 / 12" 而不是 12。 如何为子字符串使用多个分隔符?
这是我的代码(请见谅)
multiplybutton.setOnClickListener {
var x = numbersEntered.toString()
var y = ""
//creates an array that holds the operators so it can be easily filtered out
val operators = arrayOf<Char>('*','/','+','-')
//prevents app from crashing by saving the last value before the operator is added, allowing us to create infinite number of operations
if (x.any(operators :: contains)){
// x.split(operators.toString())
y = x.substringAfterLast('*') // can't use my operator character array here? why? how do I iterate through it?
Toast.makeText(this, y.toString(), Toast.LENGTH_SHORT).show()
// previousvalue = y.toInt()
} else {
previousvalue = x.toInt()
}
numbersEntered.append("*")
numbersEnteredBox.setText(numbersEntered.toString())
isMultiply = true;
Toast.makeText(this, previousvalue.toString(), Toast.LENGTH_SHORT).show()
}
编辑:请忽略斜体,不知道出了什么问题
【问题讨论】:
-
我想一种方法是获取
+、-、*和/的最后一个索引。然后,您存储具有最大值的运算符并执行substringAfterLast,或者(更容易)您只需将子字符串从该索引开始。但总的来说,这不会让你走多远(取决于你打算用你的计算器走多远)。您最终将不得不使用解析器和语法。 -
有趣!其实我没想到。