Странное поведение при добавлении String на Java - PullRequest
0 голосов
/ 21 октября 2018

Я заметил нечто странное при добавлении двух символов в строку при приведении их к целому числу.Для следующего кода у меня s1 = "+1" и s2 = "+2" в качестве входа:

String s1 = scanner.next();
String s2 = scanner.next();

System.out.println(s1.charAt(1));
System.out.println((int)s1.charAt(1));

Выход:149

Затем я попробовал также следующее:

Ввод:+1+ 2

Код:

System.out.println(s1);
System.out.println(s2);
System.out.println((int)(s1.charAt(1)) + (int)(s2.charAt(1)));

Выход:+1+299

Почему это так?Почему вывод не «3» и что я могу сделать, чтобы получить его до трех?

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Это потому, что когда вы типизируете символ в целое число, оно дает вам значение ascii этого символа вместо его преобразования.

ascii значение 1 = 49 и 2 = 50, 49 + 50 = 99.

Вместо типизации вы должны использовать синтаксический анализ.

Integer.parseInt(s1.charAt(1)); даст вам1 вместо 49.

Попробуйте.

0 голосов
/ 21 октября 2018

(int)(s1.charAt(1) возвращает коды ASCII 49 и 50 для символов 1 и 2 соответственно.Итак, 49 + 50 = 99.

Чтобы получить целочисленное значение из целочисленного символа, используйте Character.getNumericValue(c).Для строковых данных используйте Integer.parseInt(s).

0 голосов
/ 21 октября 2018

Значение ASCII 1 равно 49, а значение ASCII fo 2 равно 50, следовательно, когда вы выполняете s1.charAt (1)) + (int) (s2.charAt (1)), его печать "99 "вместо 3.

ASCII ссылки

...