Ошибка, которую вы, вероятно, получаете, это NumberFormatException.Это потому, что (""! = [0-9] +) && value value! Int.MIN_VALUE.
У вас есть три варианта:
- Сначала проверьте, пусто ли оно, как уже упоминалось в sandip.
- Используйте
toIntOrNull
- Поймать исключение.
toInt
генерирует исключение (NumberFormatException), если int недопустим.Это означает:
- Не число с заданным основанием (по умолчанию 10; фактическое целое число, т. Е. 16 - шестнадцатеричное, но здесь оно неприменимо)
- Число слишком большое илислишком маленький (в Int.MIN_VALUE или в Int.MAX_VALUE).
- Строка пуста.
Проверка, пусто ли, сначала решает половину проблемы;оно не может быть действительным, если оно пустое.Однако, это не решает проблему, если есть буквы или число слишком велико.
Вы можете использовать toIntOrNull()
для этого.Это похоже на toInt()
, но оно возвращает ноль, если преобразование не выполняется.Вы можете использовать оператор elvis с блоком run или просто использовать простой оператор if, чтобы проверить, является ли он пустым, и соответствующим образом решить проблемы.
val num1: Int = ednum1.text.toString().toIntOrNull() ?: run {
// Notify the user the first number is invalid
return; // return from the method to avoid NPE's
}
val num2: Int = ednum2.text.toString().toIntOrNull() ?: run {
// Notify the user the second number is invalid
return;
}
если вы не понимаете, что run
здесь делает, взгляните на этот вопрос .Вы также можете полностью избавиться от run
и назначить числовое значение, просто сделайте его пустым и обработайте его позже, или что-то еще.
Максимальное положительное значение типа int составляет около 2,4 млрд.Если вы ожидаете числа с более высоким входным значением, используйте Long
и эквивалентно toLongOrNull()
.
Последний вариант - перехват ошибки.
var num1: Int? = try { ednum1.text.toString().toInt() } catch (e: NumberFormatException) {
// You can do a lot of stuff in here; you can notify the user and `return` from the method,
// set it to null and handle it later, or assign an integer value.
null
}
var num2: Int? = try { ednum2.text.toString().toInt() } catch (e: NumberFormatException) {
// see my comments on the first block; same applies here
null
}
Это, на мой взгляд, несколько громоздче, чем toIntOrNull()
(/ toLongOrNull()
), но это вариант.