Kotlin – Problemas con while ()

Estaba haciendo una calculadora en Kotlin y estoy teniendo problemas para resolver un problema que tengo while() En esta parte particular del código, estoy tratando de encontrar el primer operador en la ecuación, pero necesito excluir los que indican si un número es negativo - (o positivo + , opcional), que debe indicarse entre paréntesis como sigue: (-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) } 

Para probar una ecuación normal, ingresé la ecuación 4+4 y la console se ve así:

 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) 

Como sospechaba, por alguna razón, las variables se restablecen al final del while() , que es la razón por la que nunca deja dicho dicho while() . puede alguien decirme por que?

    Lee el error Está intentando leer el carácter de una cadena en un índice que no existe con esta statement:

     input.get(op - 1) 

    Debe verificar qué op es la primera para asegurarse de que se encuentre. indexOfAny devuelve -1 si no se encuentra en la cadena. Como no podemos ver qué es charay , no podemos ayudarlo más.