2017-08-27 5 views
0

私はKotlinで電卓を作っていましたが、私はwhile()で問題を解決するのに問題があります。コードのこの特定の部分では、最初の(-5)Kotlin - while()の問題

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()なぜ誰かが私に言うことができますか?

答えて

3

エラーを確認します。あなたはこの文で存在しないインデックスで文字列の文字を読み取ろうとしている:

input.get(op - 1) 

あなたはopは、それが発見されていることを確認した最初のものであるかどうか確認する必要があります。 indexOfAnyは、文字列に見つからない場合は-1を返します。 charayがわからないので、私たちはあなたをさらに助けることはできません。

+1

私の悪い、それでもまだこれは新しいですが、私はあなたに今必要なすべての情報を与えてくれることを願っています – Migaloco