Если у нас int x = scan.nextInt()
, то при вводе строковых значений и double
значений вылазит Exception
.
Если у нас String x = scan.nextLine
, то при вводе int
значений и double
значений, мы не получаем Exception
(или можно сказать ошибку), как будто nextLine()
не для String
значений, а для всех. Почему, если мы чётко указали:
String x = scan.nextLine();
Если у нас double x = scan.nextDouble()
, то при вводе String
значений он выдаёт Exception
и int
(если пишем 123 - то выведет 123.0).
Почему всё отрабатывает как надо, а nextLine()
принимает любые значения, если мы указали String
, то есть "задали параметры строго".
Потому что введеные через nextLine()
числа воспринимаются, как текст - символы цифр, а не числа, с которыми можно производить арифметические действия. Возможно это не очевидно, но цифры тоже могут быть текстом, а так же имеют свои коды в кодовой таблице символов.
Для того, чтобы с полученным таким образом числом можно было производить числовые операции, как сложение или вычитание, его предварительно нужно преобразовать из строки, собственно, в число, к примеру типа int
. Без преобразования такое число можно только вывести на экран, но не сложить с другим (точнее, мы получим сложение строк, как "123" + "1" будет "1231", а не 124.
В случае nextInt()
этого, очевидно, не требуется и мы сразу получаем числовой тип (int), для которого доступны любые математические действия. Естественно, этот тип не может принимать символы, кроме чисел и выдает эксепшен
PS: в чем отличие. Рассмотрим пример для таблицы кодов ASCII и числа типа byte
, так как и тот и другой использует 1 байт для хранения единицы информации.
Символ "1" имеет код в таблице символов (для ASCII-кодировки это 0x31), но число 1 не имеет кода, оно хранится в виде, собственно, числа в памяти.
Так, к примеру, символы "123" будут хранится, как набор кодов: 0x31,0x32,0x33 и занимать 3 байта (по одному байту на каждый символ-код), в то время, как число 123 будет занимать один байт и храниться в этом байте, как значение - 123. Мы можем сложить его с другим таким же числом (например, 7) и новое число будет по прежнему занимать один байт (будет в этом байте хранится значение - 130). С набором символов-кодов мы этого делать не можем, так как они представлены совершенно другим образом.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно записать строку, для этого использую FileChanel and IntBuffer, чтобы скорость записи была высокой, но получаю ошибку Exception in thread "main" javanio
Хочу реализовать мультитач в моб тестированииС документации appium взял код, подключил библиотеки (указанные на сайте):
Есть АД с 1000 пользователей, атрибуты к примеру как: имя, организация, город уже заполнены, есть excel файл с еще одним атрибутомВопрос как внести...