Котлин – Проблемы с while ()

Я делал калькулятор в Котлине, и у меня возникли проблемы с решением проблемы, с которой я сталкиваюсь 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) 

Вам нужно проверить, какой из них является первым, чтобы убедиться, что он найден. indexOfAny возвращает -1 если не найден в строке. Поскольку мы не можем видеть, что такое charay , мы не можем вам помочь.