Как я могу определить, является ли целое число Java пустым? - PullRequest
26 голосов
/ 14 марта 2009

Привет,

Я пытаюсь проверить, является ли мое целое число нулевым. Если это так, мне нужно предложить пользователю ввести значение. Мой опыт работы с 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 я могу использовать «существует», чтобы проверить, содержат ли элементы хеша / массива данные с:

@items = ("one", "two", "three");
#@items = ();

if (exists($items[0])) {
    print "Something in \@items.\n";
}
else {
    print "Nothing in \@items!\n";
}

Есть ли способ сделать это в Java? Спасибо за вашу помощь!

Иеремия

P.S. Perl существует info.

Ответы [ 7 ]

41 голосов
/ 14 марта 2009

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's 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.
}
8 голосов
/ 14 марта 2009

Попробуйте это:

Integer startIn = null;

try {
  startIn = Integer.valueOf(startField.getText());
} catch (NumberFormatException e) {
  .
  .
  .
}

if (startIn == null) {
  // Prompt for value...
}
3 голосов
/ 14 марта 2009

int s - типы значений; они никогда не могут быть null. Вместо этого, если синтаксический анализ не удался, parseInt выдаст NumberFormatException, который вам нужно перехватить.

2 голосов
/ 15 марта 2012

Для меня просто использование метода 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 )
2 голосов
/ 14 марта 2009

В любом случае в Perl exists для SCALAR нет. Путь Perl -

defined( $x ) 

и эквивалентная Java

anInteger != null

Это эквиваленты.

exists $hash{key}

Это как Java

map.containsKey( "key" )

Из вашего примера, я думаю, вы ищете

if (startIn! = Null) {...

0 голосов
/ 13 июля 2012

Это должно помочь.

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
}
0 голосов
/ 14 марта 2009

Я не думаю, что вы можете использовать «существует» для целого числа в Perl, только для коллекций. Можете ли вы привести пример того, что вы имеете в виду в Perl, который соответствует вашему примеру в Java.

С учетом выражения, которое задает элемент хеша или элемент массива, возвращает значение true, если указанный элемент в хэш-элементе или массиве когда-либо был инициализирован, даже если соответствующее значение не определено.

Это означает, что это применимо только к элементам хеша или массива!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...