Kotlin - while() 的问题

Kotlin - Problems with while()

我正在用 Kotlin 制作一个计算器,但我无法解决我遇到的 while() 问题。在代码的这个特定部分,我试图找到第一个运算符在等式中,但我需要排除那些指示数字是否为负数 -(或正数 +,可选)的数字,这些数字需要在括号之间表示,如下所示:(-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() 的原因。谁能告诉我为什么?

读取错误。您正在尝试读取此语句不存在的索引处的字符串字符:

input.get(op - 1)

您需要先检查 op 是什么,以确保找到它。 indexOfAny returns -1 如果在字符串中找不到。因为我们看不到 charay 是什么,所以我们无法进一步帮助您。