цикл с когда в kotlin - PullRequest
0 голосов
/ 18 мая 2018

Я делаю простой калькулятор в Kotlin, но не могу понять, почему эта функция всегда возвращает результат, равный нулю. Я думаю, у меня есть ошибка в моем операторе switch, но я не могу выяснить, где ??

Я пытался заменитьзначение в части else и понял, что это единственная часть, которая выполняется, и все остальные случаи не выполняются

Также, если я инициализирую результат со значением, скажем 0, это значение, которое всегдавозвращается как результат.

class MainActivity : AppCompatActivity() {
lateinit  var myresult : TextView
lateinit  var val1 : EditText
lateinit var  btn : Button
lateinit var val2 : EditText
lateinit var operation : Spinner



override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

     myresult = findViewById<TextView>(R.id.txtresult)
     val1 = findViewById<EditText>(R.id.valone)
     val2 = findViewById<EditText>(R.id.valtwo)
     var btn = findViewById<Button>(R.id.button)
     operation = findViewById<Spinner>(R.id.spinner)




    var opType = operation.selectedItem.toString()

    fun calculate() : Int {

        var value1 = Integer.parseInt(val1.text.toString())
        var value2 = val2.text.toString().toInt()
        var result : Int

        when (opType){

            "+" ->{result = value1 + value2
                    return result
                 }
            "-" ->{result = value1 - value2
                return result
            }
            "*" -> {result = value1 * value2
                return result
            }
            "/" -> {result = value1 / value2
                return result
            } else -> result = 0

        }

        return result
    }




    btn.setOnClickListener{

        println(calculate().toString())
        myresult.text = calculate().toString()


    }


}

}

1 Ответ

0 голосов
/ 18 мая 2018

Вероятно, он возвращает ноль, поскольку это значение по умолчанию, если указан неизвестный opType, и вы устанавливаете opType во время события onCreate (), когда значение счетчика операций еще не было выбрано.

КакКроме того, вы, вероятно, должны стараться по возможности избегать использования 'var', чтобы избежать проблем с защитой потоков и упростить тестирование.Я бы лично переписал вашу функцию вычисления как-то так, чтобы ее можно было вызвать из события нажатия кнопки.

fun calculate(opType: String, value1: Int, value2: Int) : Int {
    return when (opType){
        "+" -> value1 + value2
        "-" -> value1 - value2
        "*" -> value1 * value2
        "/" -> value1 / value2
        else -> 0
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...