Как определить, является ли целое число Java нулевым?
Привет,
Я пытаюсь проверить, является ли мое целое число равным нулю. Если это так, мне нужно предложить пользователю ввести значение. Мой фон - Perl, поэтому моя первая попытка выглядит так:
int startIn = Integer.parseInt (startField.getText());
if (startIn) {
JOptionPane.showMessageDialog(null,
"You must enter a number between 0-16.","Input Error",
JOptionPane.ERROR_MESSAGE);
}
Это не работает, поскольку Java ожидает логическую логику.
В Perl я могу использовать "exists", чтобы проверить, содержат ли элементы hash/array следующие данные:
@items = ("one", "two", "three");
#@items = ();
if (exists($items[0])) {
print "Something in \@items.\n";
}
else {
print "Nothing in \@items!\n";
}
Есть ли способ для этого в Java? Спасибо за помощь!
Иеремия
P.S. Perl exists info.
Ответы
Ответ 1
parseInt()
просто генерирует исключение, если синтаксический анализ не может завершиться успешно. Вместо этого вы можете использовать Integers
, соответствующий тип объекта, который делает вещи немного чище. Поэтому вы, вероятно, хотите что-то ближе:
Integer s = null;
try {
s = Integer.valueOf(startField.getText());
}
catch (NumberFormatException e) {
// ...
}
if (s != null) { ... }
Остерегайтесь, если вы решите использовать parseInt()
! parseInt()
не поддерживает хорошую интернационализацию, поэтому вам нужно перепрыгнуть еще больше обручей:
try {
NumberFormat nf = NumberFormat.getIntegerInstance(locale);
nf.setParseIntegerOnly(true);
nf.setMaximumIntegerDigits(9); // Or whatever you'd like to max out at.
// Start parsing from the beginning.
ParsePosition p = new ParsePosition(0);
int val = format.parse(str, p).intValue();
if (p.getIndex() != str.length()) {
// There some stuff after all the digits are done being processed.
}
// Work with the processed value here.
} catch (java.text.ParseFormatException exc) {
// Something blew up in the parsing.
}
Ответ 2
Попробуйте следующее:
Integer startIn = null;
try {
startIn = Integer.valueOf(startField.getText());
} catch (NumberFormatException e) {
.
.
.
}
if (startIn == null) {
// Prompt for value...
}
Ответ 3
int
- типы значений; они никогда не могут быть null
. Вместо этого, если синтаксический анализ не удался, parseInt
выкинет NumberFormatException
, который вам нужно поймать.
Ответ 4
В Perl нет exists
для SCALAR в Perl. Способ Perl -
defined( $x )
а эквивалентная Java -
anInteger != null
Это эквиваленты.
exists $hash{key}
Как Java
map.containsKey( "key" )
В вашем примере, я думаю, вы ищете
if (startIn!= null) {...
Ответ 5
Для меня просто использование метода Integer.toString() работает для меня просто отлично. Вы можете преобразовать его, если хотите просто, если он равен нулю. Пример ниже:
private void setCarColor(int redIn, int blueIn, int greenIn)
{
//Integer s = null;
if (Integer.toString(redIn) == null || Integer.toString(blueIn) == null || Integer.toString(greenIn) == null )
Ответ 6
Я не думаю, что вы можете использовать "существует" для целого числа в Perl, только для коллекций. Можете ли вы привести пример того, что вы имеете в виду в Perl, который соответствует вашему примеру в Java.
Учитывая выражение, которое указывает элемент хэша или элемент массива, возвращает true, если указанный элемент в хеше или массиве когда-либо был инициализирован, даже если соответствующее значение undefined.
Это означает, что он применяется только к элементам хэша или массива!
Ответ 7
Это должно помочь.
Integer startIn = null;
// (optional below but a good practice, to prevent errors.)
boolean dontContinue = false;
try {
Integer.parseInt (startField.getText());
} catch (NumberFormatException e){
e.printStackTrace();
}
// in java = assigns a boolean in if statements oddly.
// Thus double equal must be used. So if startIn is null, display the message
if (startIn == null) {
JOptionPane.showMessageDialog(null,
"You must enter a number between 0-16.","Input Error",
JOptionPane.ERROR_MESSAGE);
}
// (again optional)
if (dontContinue == true) {
//Do-some-error-fix
}