返回 Space 导致计算器崩溃
Back Space Causes Crash in Calculator
每当我在没有输入的情况下按下返回 Space 按钮时,Android 计算器应用程序就会崩溃。
此代码是用 Kotlin 编写的,IDE 是 Android Studio,BackSpace 在下面的代码中 MainActivity.kt 中标记为 tvBack。
我应该如何处理这个崩溃?
//BACK
tvBack.setOnClickListener{
val string =tvResult.text.toString()
val string2=tvExpression.text.toString()
if(string.isEmpty()){
tvExpression.text = string2.substring(0,string2.length-1)
}else if(string2.isNotEmpty()){
tvResult.text=""
}else if(string2.isEmpty()){
return@setOnClickListener
}
问题出在这一行:
tvExpression.text = string2.substring(0,string2.length-1)
如果您的 string2 为空,string2.length
为 0,则此行的计算结果为
tvExpression.text = string2.substring(0,-1)
所以这是一个无效的子字符串。
因此在生成子字符串之前,您应该首先检查字符串是否不为空。您可以通过在 tvBack.setOnClickListener{
之后添加以下行来执行此操作:
if (string2.length == 0) return;
// 编辑:
请将您的代码编辑为以下内容:
tvBack.setOnClickListener{
val string =tvResult.text.toString()
val string2=tvExpression.text.toString()
if(string2.isNotEmpty()){
tvExpression.text = string2.substring(0,string2.length-1)
tvResult.text=""
}
你的新错误的问题是,你做错了检查。
如果字符串 not 为空,您只想生成和使用子字符串。你的代码做了相反的事情
每当我在没有输入的情况下按下返回 Space 按钮时,Android 计算器应用程序就会崩溃。 此代码是用 Kotlin 编写的,IDE 是 Android Studio,BackSpace 在下面的代码中 MainActivity.kt 中标记为 tvBack。
我应该如何处理这个崩溃?
//BACK
tvBack.setOnClickListener{
val string =tvResult.text.toString()
val string2=tvExpression.text.toString()
if(string.isEmpty()){
tvExpression.text = string2.substring(0,string2.length-1)
}else if(string2.isNotEmpty()){
tvResult.text=""
}else if(string2.isEmpty()){
return@setOnClickListener
}
问题出在这一行:
tvExpression.text = string2.substring(0,string2.length-1)
如果您的 string2 为空,string2.length
为 0,则此行的计算结果为
tvExpression.text = string2.substring(0,-1)
所以这是一个无效的子字符串。
因此在生成子字符串之前,您应该首先检查字符串是否不为空。您可以通过在 tvBack.setOnClickListener{
之后添加以下行来执行此操作:
if (string2.length == 0) return;
// 编辑: 请将您的代码编辑为以下内容:
tvBack.setOnClickListener{
val string =tvResult.text.toString()
val string2=tvExpression.text.toString()
if(string2.isNotEmpty()){
tvExpression.text = string2.substring(0,string2.length-1)
tvResult.text=""
}
你的新错误的问题是,你做错了检查。 如果字符串 not 为空,您只想生成和使用子字符串。你的代码做了相反的事情