перегрузка функции котлина для андроида - PullRequest
0 голосов
/ 22 ноября 2018

Я изучаю Java / Kotlin и попытался написать простое приложение для калькулятора.Все работает до тех пор, пока я не нажму клавишу ввода, чтобы получить ответ.Я реализовал две функции отображения numberDisplay.тот, который отображает вводимые пользователем данные в текстовом представлении, и тот, который отображает ответ на тот же текстовый просмотр после нажатия пользователем ввода.Тем не менее, ответ не отображается.Если я удаляю вторую функцию отображения и придерживаюсь только одной (той, которая принимает массив), она работает.но он не будет работать со второй функцией, которая принимает строку.Я просто не отображается по какой-то причине.Я знаю, что, возможно, есть лучшие способы сделать это, но я хочу выяснить, почему перегрузка не сработает.

package com.zzz.yyy.xx

import android.graphics.Color
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import kotlinx.android.synthetic.main.activity_main.*
import kotlin.collections.ArrayList

class MainActivity : AppCompatActivity() {

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

        }

    var displayList = arrayListOf<String>()

    fun buttEvent(view:View){
        val butt = view as Button
        var buttID:String = "0"

        when(butt.id){
            button13.id-> buttID ="C"
            button14.id-> buttID ="D"
            button15.id-> buttID ="/"

            button16.id-> buttID ="8"
            button17.id-> buttID ="9"
            button18.id-> buttID ="X"
            button7.id-> buttID ="7"

            button19.id-> buttID ="5"
            button20.id-> buttID ="6"
            button21.id-> buttID ="-"
            button6.id-> buttID ="4"

            button22.id-> buttID ="1"
            button23.id-> buttID ="2"
            button24.id-> buttID ="3"
            button25.id-> buttID ="+"

            button26.id-> buttID ="0"
            button27.id-> buttID ="."
            button28.id-> buttID ="="
            button29.id-> buttID ="N"
            else-> buttID="null"
        }

        if(buttID == "D"){
            displayList.removeAt(displayList.count()-1)
        } else if (buttID == "C"){
            displayList.clear()
        }else if (buttID== "="){
            equals(displayList)
        }else{
            displayList.add(buttID)
        }
        numberDisplay(displayList)

    }

    fun equals(xthings:ArrayList<String>){
        var operation = ""
        var temp= ArrayList<String>()
        var indexoperation = 0
        var finalnumber= xthings.count()
        var answer:String = ""

        for (thing in xthings) {
            if (thing == "X" || thing == "-" || thing == "+" || thing == "/") {
                indexoperation = xthings.indexOf(thing)
                operation = thing
            }
        }
        temp= xthings.joinToString("").split(operation) as ArrayList<String>


        when(operation){
            "X"-> answer= (temp[0].toInt() * temp[1].toInt()).toString()
            else-> answer = "null"
        }

        numberDisplay(answer)
    }

    fun numberDisplay(arr:ArrayList<String>){
        val outputString:String = arr.joinToString("")
        showNumbers.text = outputString
    }

    fun numberDisplay(texts:String){
        showNumbers.text = texts
    }

}

Я, вероятно, упускаю что-то очевидное, но я не могу понять, что

edit: я сделал это, добавив второе событие onclick.используя новый для кнопки равенства, вот новый код

class MainActivity : AppCompatActivity() {

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

        }

    var displayList = arrayListOf<String>()

    fun buttEvent(view:View){
        val butt = view as Button
        var buttID:String = "0"

        when(butt.id){
            button13.id-> buttID ="C"
            button14.id-> buttID ="D"
            button15.id-> buttID ="/"

            button16.id-> buttID ="8"
            button17.id-> buttID ="9"
            button18.id-> buttID ="X"
            button7.id-> buttID ="7"

            button19.id-> buttID ="5"
            button20.id-> buttID ="6"
            button21.id-> buttID ="-"
            button6.id-> buttID ="4"

            button22.id-> buttID ="1"
            button23.id-> buttID ="2"
            button24.id-> buttID ="3"
            button25.id-> buttID ="+"

            button26.id-> buttID ="0"
            button27.id-> buttID ="."

            button29.id-> buttID ="N"
            else-> buttID="null"
        }

        if(buttID == "D"){
            displayList.removeAt(displayList.count()-1)
        } else if (buttID == "C"){
            displayList.clear()
        }else{
            displayList.add(buttID)
        }
        numberDisplay(displayList)

    }

    fun buttEqual(view: View){

        var operation = ""
        var temp= ArrayList<String>()
        var indexoperation = 0
        var finalnumber= displayList.count()
        var answer:String = ""

        for (thing in displayList) {
            if (thing == "X" || thing == "-" || thing == "+" || thing == "/") {
                indexoperation = displayList.indexOf(thing)
                operation = thing
            }
        }
        temp= displayList.joinToString("").split(operation) as ArrayList<String>


        when(operation){
            "X"-> answer= (temp[0].toInt() * temp[1].toInt()).toString()
            else-> answer = "null"
        }

        numberDisplayx(answer)

    }


    fun numberDisplay(arr:ArrayList<String>){
        val outputString:String = arr.joinToString("")
        showNumbers.text = outputString
    }

    fun numberDisplayx(texts:String){
        showNumbers.text = texts.toString()
    }

}

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

1 Ответ

0 голосов
/ 22 ноября 2018

Попробуйте использовать функцию с vararg:

fun numberDisplay(vararg texts:String) {
    ...
}

Назовите его:

var answer:String = ""
numberDisplay(answer)

или

var displayList = arrayListOf<String>()
numberDisplay(*displayList)
...