【发布时间】:2021-07-11 21:57:02
【问题描述】:
我是安卓开发新手。我试图使用 Kotlin 实现一个简单的计算器。所有功能都按预期工作,除了当我只输入我的第一个操作数和运算符但没有给出我的第二个操作数并按相等而不是它崩溃时。
显然我得到的错误是它试图执行“inputValue = binding.tvInput.text.toString()”但失败了,因为它们在 tvInput 中没有价值。
我想我已经在 onEquals 函数中写了一个 if 语句来处理这个问题,但是它不起作用。
这是供您参考的代码:
请帮忙!
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tvResult"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#efefef"
android:maxLength="12"
tools:text="Result"
android:textSize="48sp" />
<TextView
android:id="@+id/tvOperator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#efefef"
android:maxLength="1"
tools:text="Operator"
android:textSize="48sp" />
<TextView
android:id="@+id/tvInput"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#efefef"
android:maxLength="12"
tools:text="Input"
android:textSize="48sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="0dp">
<android.widget.Button
android:id="@+id/btn7"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="7" />
<android.widget.Button
android:id="@+id/btn8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="8" />
<android.widget.Button
android:id="@+id/btn9"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="9" />
<android.widget.Button
android:id="@+id/btnDivide"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onOperator"
android:text="/" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="0dp">
<android.widget.Button
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="4" />
<android.widget.Button
android:id="@+id/btn5"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="5" />
<android.widget.Button
android:id="@+id/btn6"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="6" />
<android.widget.Button
android:id="@+id/btnMultiply"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onOperator"
android:text="*" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="0dp">
<android.widget.Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="1" />
<android.widget.Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="2" />
<android.widget.Button
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="3" />
<android.widget.Button
android:id="@+id/btnMinus"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onOperator"
android:text="-" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="0dp">
<android.widget.Button
android:id="@+id/btnDot"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDecimalPoint"
android:text="." />
<android.widget.Button
android:id="@+id/btn0"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDigit"
android:text="0" />
<android.widget.Button
android:id="@+id/btnClr"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onClear"
android:text="clr" />
<android.widget.Button
android:id="@+id/btnPlus"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onOperator"
android:text="+" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:padding="0dp">
<android.widget.Button
android:id="@+id/btnDel"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onEquals"
android:text="=" />
<android.widget.Button
android:id="@+id/btnEquals"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="2dp"
android:layout_marginEnd="2dp"
android:layout_weight="1"
android:onClick="onDelete"
android:text="DEL" />
</LinearLayout>
</LinearLayout>
MainActivity.kt
package com.jeetkabiraj.calculatorapp
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Button
import com.jeetkabiraj.calculatorapp.databinding.ActivityMainBinding
import com.jeetkabiraj.calculatorapp.databinding.ActivityMainBinding.inflate
import java.lang.ArithmeticException
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
var lastNumaric = false
var lastDot = false
var inputValue: String = ""
var result: String = ""
var operator: String = ""
var finalResult: Double = 0.0
var TAG = "Message"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewBinding()
}
private fun viewBinding() {
binding = inflate(layoutInflater)
setContentView(binding.root)
}
fun onDigit(view: View){
binding.tvInput.append((view as Button).text)
lastNumaric = true
}
fun onClear(view: View) {
binding.tvInput.text = ""
lastNumaric = false
lastDot = false
}
fun onDecimalPoint(view: View){
if(lastNumaric && !lastDot){
binding.tvInput.append(".")
lastDot = true
lastNumaric = false
}
}
fun onOperator(view: View){
operator = (view as Button).text.toString()
if(result == ""){
result = binding.tvInput.text.toString()
binding.tvResult.text = result
binding.tvOperator.text = operator
binding.tvInput.text = ""
}
else{
binding.tvOperator.text = operator
binding.tvInput.text = ""
}
}
fun onEquals(view: View){
if((binding.tvOperator.text != "") && (binding.tvResult.text != "") && (binding.tvInput.text != "")){
result = binding.tvResult.text.toString()
inputValue = binding.tvInput.text.toString()
operator = binding.tvOperator.text.toString()
var op1: Double = result.toDouble()
Log.e(TAG, "inputValue is? " +binding.tvInput.text)
var op2: Double = inputValue.toDouble()
when(operator){
"+" -> finalResult = op1 + op2
"-" -> finalResult = op1 - op2
"*" -> finalResult = op1 * op2
"/" -> {
try {
finalResult = op1 / op2
} catch (e: ArithmeticException){
e.printStackTrace()
}
}
}
binding.tvResult.text = finalResult.toString()
binding.tvInput.text = ""
binding.tvOperator.text = ""
} else{
binding.tvInput.text = "Error"
}
}
fun onDelete(view: View){
binding.tvInput.text = ""
binding.tvResult.text = ""
binding.tvOperator.text = ""
result = ""
inputValue = ""
operator= ""
finalResult = 0.0
lastDot = false
lastNumaric = false
}
}
【问题讨论】:
-
也添加异常
-
我应该在哪里添加它以及什么异常,我是新人请详细说明
-
问题是关于你得到的错误。您能否提供更多有关它的信息,最好是堆栈跟踪?
-
试试这个github.com/bitactro/Basic_Calculator_Android_App。它在 java 中,但工作得很好
-
引起:java.lang.NumberFormatException:空字符串在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 在 sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 在java.lang.Double.parseDouble(Double.java:538) at com.jeetkabiraj.calculatorapp.MainActivity.onEquals(MainActivity.kt:83)
标签: android android-studio kotlin