我在Kotlin制作了一个计算器,我在解决-
时遇到的问题时遇到了问题。在代码的这个特定部分,我试图找到第一个运算符。方程式,但我需要排除那些表示数字是否为+
(或正(-5)
,可选)的数字,需要在括号中表示,如:var charay = charArrayOf('+', '-', '*', '/')
var op = 0
var reference = 0
var bol = false
while( bol == false && op != -1){
println(op)
println(bol)
println(bol == false && op != -1)
op = input.indexOfAny(charay, reference)
if (!input.get(op - 1).equals('(')){
bol = true
}else{
reference = op + 1
}
println(op)
println(bol)
println(bol == false && op != -1)
}
4+4
为了测试正规方程式,我输入了等式0
false
true
1
true
false
0
false
true
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: -2
at java.lang.String.charAt(String.java:658)
at CalculatorKt.CalculateValue(Calculator.kt:67)
at CalculatorKt.CalculateValue(Calculator.kt:108)
at CalculatorKt.main(Calculator.kt:119)
,控制台如下所示:
while()
就像我怀疑的那样,由于某种原因,变量在while()
的末尾重置,这就是为什么它永远不会离开{{1}}的原因。谁能告诉我为什么?
答案 0 :(得分:3)
阅读错误。您试图在此语句不存在的索引处读取字符串的字符:
input.get(op - 1)
您需要先检查op
是什么,以确保找到它。如果在字符串中找不到,则indexOfAny
会返回-1
。因为我们无法看到charay
是什么,所以我们无法帮助您。