Почему Integer.getInteger не работает? - PullRequest
20 голосов
/ 09 декабря 2010

У меня есть следующий код:

game.log.fine("HERE" + bestMove.get("score"));
Integer bestScore = Integer.getInteger(bestMove.get("score"));
game.log.fine("THERE" + bestScore);

В качестве вывода у меня есть:

FINE: HERE50
Dec 9, 2010 11:34:17 AM game.Agent getCloud
FINE: THEREnull
Dec 9, 2010 11:34:17 AM game.Agent getCloud

Возможно, мне пришлось добавить, что bestMove HashMap<String,String>.

Проблема в том, что bestMove.get("score") дает строковое значение (равное "50").Но если попытаться преобразовать в целое число, я получу null.

Кто-нибудь знает, в чем здесь проблема?

Ответы [ 8 ]

36 голосов
/ 09 декабря 2010

Потому что Integer.getInteger - это не то, что вы ищете.Из Javadoc:

Определяет целочисленное значение системного свойства с указанным именем.Первый аргумент обрабатывается как имя системного свойства.Системные свойства доступны через метод System.getProperty (java.lang.String).Строковое значение этого свойства затем интерпретируется как целочисленное значение, и возвращается объект Integer, представляющий это значение.Подробную информацию о возможных числовых форматах можно найти в определении getProperty.

Если нет свойства с указанным именем, если указанное имя является пустым или пустым, или если свойство не имеет правильный числовой формат, тогда возвращается ноль.

Вы хотите использовать Integer.parseInt

10 голосов
/ 09 декабря 2010

Я бы использовал метод Integer.valueOf(String n).

Integer bestScore = Integer.valueOf(bestMove.get("score"));

Из этого блога , причина, которую они дали,

Integer.getInteger(String) преобразуетString to number, предполагая, что String является именем числового представления системного свойства.Другими словами.Integer.getInteger("12345") может дать null.

10 голосов
/ 09 декабря 2010

Я подозреваю, что вы ищете метод Integer.parseInt:

Анализирует строковый аргумент как десятичное целое число со знаком.

Пример использования:

int bestScore = 0;
try {
    bestScore = Integer.parseInt(bestMove.get("score"));
} catch (NumberFormatException nfe) {
    // handle exception gracefully
}

Integer.getInteger делает что-то совершенно другое:

Определяет целочисленное значение системного свойства с указанным именем.

4 голосов
/ 14 марта 2013

Basic Integer.getInteger:

Метод java.lang.Integer.getInteger(String nm, int val) определяет целочисленное значение системного свойства с указанным именем . Аргумент val равен значение по умолчанию . Целочисленный объект , представляющий значение второго аргумента , возвращается, если нет свойства указанного имени, если свойство не имеет правильного числовой формат , или если указанное имя пусто или пусто .

Или

java.lang.Integer.getInteger(String nm) Определяет целочисленное значение системного свойства с указанным именем.Аргумент обрабатывается как имя системного свойства.Строковое значение этого свойства затем интерпретируется как целочисленное значение, и возвращается объект Integer, представляющий это значение. Если существует нет свойства с указанным именем, если указанное имя является пустым или пустым , или если свойство не имеет , то правильный числовой формат , затем возвращается null .

Примечание: Свойства системы доступны через метод System.getProperty(java.lang.String).


Решение для использования: (Integer.parseInt / Integer.valueOf)

java.lang.Integer.parseInt(String s) анализирует строковый аргумент как десятичное целое число со знаком .Символы в строке должны все быть десятичные цифры , за исключением того, что первый символ может быть от ASCII знак минуса '-' ('\u002D') до , обозначать отрицательное значение ,Полученное целочисленное значение возвращается точно так же, как если бы аргумент и основание 10 были заданы в качестве аргументов для метода parseInt(java.lang.String, int).

Или

java.lang.Integer.valueOf(String s)возвращает объект типа Integer , содержащий значение указанной строки .Аргумент интерпретируется как представляющий десятичное целое число со знаком , точно так же, как если бы аргумент был передан методу parseInt(java.lang.String).В результате получается объект Integer , представляющий целочисленное значение, указанное в строке.Другими словами, этот метод возвращает объект Integer, равный значению:

new Integer(Integer.parseInt(s))
2 голосов
/ 09 декабря 2010

Вы должны использовать

Integer.parseInt

в своем коде, поскольку

Integer.getInteger

определит целочисленное значение системного свойства с указанным именем.

Правильный кодбудет:

Integer bestScore = Integer.parseInt(bestMove.get("score"), 10);

, что 10 в качестве второго аргумента является основанием.Используйте его всегда, чтобы ваш номер не анализировался неоднозначно.

1 голос
/ 09 декабря 2010

Используйте этот метод:

Integer.parseInt(bestMove.get("score"));
0 голосов
/ 09 декабря 2010

Вместо этого используйте Integer.parseInt .

0 голосов
/ 09 декабря 2010

Использование Integer.parseInt(String).

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