Подскажите пожалуйста почему через сканер не выводится строка s на экран? То есть не читает следующую строку.
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s = scan.nextLine();
System.out.println("String: " + s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
Игорь
19 уровень
Не выводит строку.
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
15 июля 2019, 10:52решение
Сканер инструмент специфический, если используешь его, что вполне ок, но ты должен знать его особенности.
А еще настоятельно рекомендую тебе следующий алгоритм:
1. Самостоятельно подумать, почитать джава доки методов, покрутить.
2. Погуглить.
3. Задать вопрос.
Я ответ нашел в гугле за 2 секунды, еще 5 секунд потратил на чтение.
На моем месте должен был быть ты.
Умение эффективно гуглить это серьезный скилл программиста, над этим скиллом нужно работать.
Уже очень скоро пойдут темы, в которых тебе и помогать никто не будет, ну вот девченка задала вопрос о маппинге параметров кажись, у нее 0 ответов.
Код не предоставила, сама уверен она гуглила, но неэффективно. Задала вопрос - 0 ответов.
Вот твое будущее :) Ты будешь предоставлен сам себе на сложных вопросах, поэтому готовся к этому сейчас на легких вопросах.
С помощью гугля и хорошей базы ты сможешь все. Но ответы нужно научиться добывать.
https://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-or-nextfoo
Методы Сканера (как и буффередРидера) читаю не из консоли, а из буфера...Просто в буфер информация загоняется с консоли.
+3
Игорь
15 июля 2019, 11:10
Спасибо за советы! Я тоже нашел ответ спустя какое-то время, но еще не до конца всё понял. Просто иногда хочется какого то человеческого ответа, а не читать зарубежные форумы. Всего доброго. )
0
Justinian Judge в Mega City One Master
15 июля 2019, 11:34
Та не за что :) Джава это нелегко, но если нелегко сейчас то радуйся, это значит что потом, остальные будут тормозить, а ты будешь идти дальше.
Насчет зарубежных форумов, я понимаю что там тяжело читать, но работодатель простит тебе незнание Джавы в нужном объеме, но форумы нужно читать обязательно, уметь читать, и любить даже - вся актуальная информация по вопросам - на англоязычных форумах. А то что не все понимаешь, научись просто вычленять главное и находить решение. Потом привыкнешь.
По этому вопросу ты все понял, или вопросы остались?
Сканер имеет буфер в который загоняет строки введенные с клавиатуры (в данном случае).
У сканера есть токенизированные методы, которые вычленяют определенный токен - тип.
nextInt(), nextDouble() и тд, но они consumes, потребляют с буфера только значения чисел, последнее /n , знак переноса строки (Enter при вводе, или новая строка в файле) остается в буффере.
По твоему коду получается следующий ввод:
Вводишь: 25/n - нашло и записало 25, остался /n в буфере
Вводишь 23.34/n - в буфере /n, это для числа ему мало, оно считало еще 23.34, но остался /n
и при вызове метода nextLine буфер не пустой, там висит байт /n. У тебя метод который вполне допускает простую строку (/n это и есть "ничего + перенос строки"), и поэтому у Сканера нет потребности считывать из консоли, он просто берет из буфера пустую строку и возвращает ее.
0
Игорь
16 июля 2019, 04:51
Да, спасибо! Остался один вопрос, но ответ я уже сам найду. )
0
Justinian Judge в Mega City One Master
16 июля 2019, 10:42
не за что, не найдешь - пиши )
0