Подтвердить что ты не робот

Почему Integer.getInteger не работает?

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

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.

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Integer.getInteger(String) преобразует a Строка к числу, предположив, что Строка - это название системы цифровое представление свойств. В другие слова. Integer.getInteger("12345")вероятно, даст null.

Ответ 3

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

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

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

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

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

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

Ответ 4

Основные Integer.getInteger:

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

или

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))

Ответ 5

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

Integer.parseInt

в вашем коде с

Integer.getInteger

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

Правильный код:

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

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

Ответ 6

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

Integer.parseInt(bestMove.get("score"));

Ответ 7

Используйте Integer.parseInt(String).