我们有一个EditText,它是inputType numberDecimal,我们可以验证输入的数字,如果没有输入任何值。我们的问题是,如何将两者合并到一个if语句中,或者这甚至可能。直到我们尝试将此长度测试添加到值中,下面的代码运行都没有问题,并使用此代码行输入test if(F.toInt()<1 || S.toInt()> 7 || L == 0){
fun weekDAY(view: View?){
val L:Int = etValOne.length()
if(L == 0){
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
val F: String = etValOne.text.toString()
val S: String = etValOne.text.toString()
if( F.toInt() < 1 || S.toInt() > 7 ){
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
var dayOfWeek: String = etValOne.text.toString()
var dayOfWeekInString = when(dayOfWeek.toInt()) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid Day"
}
etANS.setText(dayOfWeekInString)
}
我们了解我们试图开发ERROR陷阱方法的when方法中的else语句。是的,我们已经查看了其他帖子,它们是我们能够编写两次错误检查的方式。没有帖子同时检查了这两个值!
答案 0 :(得分:2)
在您的函数中,您有重复的不必要的编码。
我尝试简化一下:
fun weekDAY(view: View?){
val F: String = etValOne.text.toString().trim()
val L: Int = F.length
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
if((L == 0) || (value !in 1..7)) {
toast("Check The Entry\nValid Entry 1 to 7")
return@weekDAY
}
val dayOfWeekInString = when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid Day"
}
etANS.setText(dayOfWeekInString)
}
如您所见,您只需一次从EditText etValOne
中获取字符串:F
然后您就可以获取其长度:L
那么您会得到一个数值:value
被try / catch包围,因此,如果字符串为空或非数字,则应用程序不会崩溃。
之后,只有1个if
会同时检查长度和值。
else
语句的when
部分将永远不会执行。
如果要在无效值的情况下将字符串"Invalid Day"
显示在EditText etANS
中,则必须在if
块内进行编码。
上面的代码甚至可以简化甚至更多(但我保留了您原来的逻辑),如下所示:
fun weekDAY(view: View?){
val F: String = etValOne.text.toString().trim()
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
val dayOfWeekInString = when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> {
toast("Check The Entry\nValid Entry 1 to 7")
"Invalid Day"
}
}
etANS.setText(dayOfWeekInString)
}
这样您不需要显式检查长度,因为如果长度为0,则NumberFormatException
语句和变量{{ 1}}将保持为0。因此稍后的catch
语句将返回value
答案 1 :(得分:0)
尽管以上答案是正确的,但我想补充一点。不应在方法主体内部设置editText的值,而应返回有效日期或错误。 Function将以这种方式执行其独立任务,并且是可测试的。
fun weekDAY(view: View?) : String{
val F: String = etValOne.text.toString().trim()
var value = 0
try {
value = F.toInt()
} catch (e: NumberFormatException) {
}
return when(value) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> {
toast("Check The Entry\nValid Entry 1 to 7")
"Invalid Day"
}
}
}