android - android 的 kotlin 函数重载
问题描述
我正在学习 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
}
}
我可能遗漏了一些明显的东西,但我不知道是什么
编辑:我通过添加第二个 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()
}
}
我仍然想知道为什么它第一次不起作用
解决方案
尝试使用功能vararg
:
fun numberDisplay(vararg texts:String) {
...
}
叫它:
var answer:String = ""
numberDisplay(answer)
或者
var displayList = arrayListOf<String>()
numberDisplay(*displayList)
推荐阅读
- java - 为什么在这个寻路算法中路径是反向的?
- c# - 查询和合并来自多个 JSON 文件的数据
- powerbi - 如何只在表格中显示TOP N
- python - 我可以使用 dnspython 编写带有 $TTL 的 DNS 区域文件吗?
- elasticsearch - 在 Elasticsearch Data 文件夹中,创建文件夹 nodes/1 的场景是什么?
- java - 转义 XML 特殊字符
- excel - 我应该在每个模块中初始化 .fileSystemObject 的新实例,还是应该努力从主模块中引用该对象?
- android - 如何在撰写中获得活动
- java - 错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将会退出
- python - 如何使用 Sendgrid API 实现分页?