|
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 10
|
||||||||||||||||
Цикл Do-While исполняется лишний раз27.10.2021, 22:53. Показов 2622. Ответов 21
Метки нет (Все метки)
Простецкая демонстрация работы цикла do-while вызвала у меня ступор.
Система просит ввести символ, и, если он не равен заданному, просит ввести снова, и т.д.
(а в IDEA - почему-то дважды).
Помогите, пожалуйста, чайнику понять: 1. как вывести строку по одному разу, используя do-while. 2. как количество введенных символов коррелирует с количеством строковых сообщений.
0
|
||||||||||||||||
| 27.10.2021, 22:53 | |
|
Ответы с готовыми решениями:
21
_getch() считывает номер и прогоняет цикл лишний раз VBA стандартный поиск .FindNext цикл выполняется лишний раз нормально ли это?
|
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
|
| 28.10.2021, 02:55 | |
|
Вы методом read считываете байт а не символ, попробуйте вывести каждый байт в 16ти ричном формате. Другими словами ваш символ может и 2 байта занимать.
Вы запускаете программу которая читает стандартный ввод, а что ей там на ввод приходит надо тоже понять. Даже когда вы нажали enter это тоже символ перехода.
0
|
|
|
0 / 0 / 0
Регистрация: 20.01.2013
Сообщений: 10
|
||||||
| 28.10.2021, 14:59 [ТС] | ||||||
|
Пример взят из книги Г. Шилдта "Java для начинающих", 2019.
Добавлено через 5 часов 31 минуту Помогло добавление цикла (стр. 8 - 12). Но я пока не понял, почему. К сожалению. Может, дальше по книге это будет разъяснено.
Насколько я понял, первый символ считывается в рамках основного цикла, а все остальные отбрасываются, если они не равны '/n', т.е. нажатию ENTER.
0
|
||||||
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
|||||||||||
| 28.10.2021, 15:18 | |||||||||||
Сообщение было отмечено s_grooz как решение
Решение
Все очень просто:
1) System.in это поток стандартного ввода, вы читаете оттуда по 1 байту и это неоспоримый факт. 2) с учетом пункта 1 выходит что туда попадает более 1 символа. 3) Надо задать вопрос, кто туда запихивает более 1 символа? И вот в пункте 3 возник сам вопрос. Если вы запустите программу и посмотрите кто родитель процесса, то вы узнаете кто владелец потока ввода вашего процесса. Собственно если приходит что-то лишнее, то проблема скорее всего в нем(В процессе - родителе вашего процесса) Вот я немного вставил печати в ваше программу:
Когда ввел df: первый символ считало и он тот что надо, второй f - его код 0x66 , и наконец 0x0a это наш '\n' Когда ввел g: первый g, второй 0x0a это наш '\n' итд.... По сути вы нашали 2 кнопки, значит получили 2 символа. Запуск я сделал из консоли линукса и если в idea не так, то проблема именно в консоли idea.
1
|
|||||||||||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
||
| 28.10.2021, 15:48 | ||
|
ТС вводит <символ><ENTER> --- это два или три символа в зависимости от ОС/терминала: "q\n" или "q\r\n". Какие процессы, о чём ты вообще?
2
|
||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|
| 28.10.2021, 15:58 | |
|
0
|
|
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
|
| 28.10.2021, 16:10 | |
|
О том самом, поток ввода процесса у кого? Вы говорите в зависимости от ОС/Терминала, а потом спрашиваете о процессах?
![]() Но вы правильно написали про терминал, странно что вы удивляетесь тому как устроены ОС и их процессы. Вот пример дерева процессов в линуксе (ps axjf) до java процесса нашей программки: 540- 3924 54626 3923 3923 ? -1 Sl 1000 0:15 \_ /usr/bin/konsole 541- 54626 54639 54639 54639 pts/1 66962 Ss 1000 0:00 \_ /bin/bash 542: 54639 66962 66962 54639 pts/1 66962 Sl+ 1000 0:00 | \_ java Main Владелец потока bash, а дальше уже зависит от того как реализована консоль внутри. Может там делают обычный dup2() при fork(), а можно и обработать добавив всякий бред. В целом вы правы. Мне же важно донести суть того, как все устроено, т.к. тема для новичков. Надо смотреть глубже а не только в java сидеть.
0
|
|
| 28.10.2021, 16:12 | |
|
0
|
|
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
||||||||||||
| 28.10.2021, 16:13 | ||||||||||||
1
|
||||||||||||
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
|||||||
| 28.10.2021, 16:16 | |||||||
0
|
|||||||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|||
| 28.10.2021, 16:23 | |||
|
darkduke, с тобой все в порядке, когда ты байт из
InputStream называешь UTF-16 символом char?
P. P. S. А если бы ТС читал данные из UTF-32 потока? Тоже сказал бы, что 2 символа?
0
|
|||
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
||
| 28.10.2021, 16:57 | ||
|
0
|
||
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|
| 28.10.2021, 17:00 | |
|
darkduke, так ув.korvin_ в 5-м посте все обосновал, чего непонятного-то? И зачем какой-то огород городить?
0
|
|
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
||
| 28.10.2021, 17:13 | ||
0
|
||
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|
| 28.10.2021, 17:16 | |
|
darkduke, ты же сам выше заострил внимание на том, что ТС только учится, и учится по Шилдту. То бишь основы. Зачем ему лить в уши страшную информацию о процессах и их хозяевах? Пятый пост - все что нужно ТСу на данном этапе.
0
|
|
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|
| 28.10.2021, 17:17 | |
|
darkduke, причем тут консоль и процессы, если дело в кодировке потока ввода?
0
|
|
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
||
| 28.10.2021, 18:08 | ||
|
В данном случае терминал(процесс - родитель) считает, что надо передать код символа и код '\n' и возможно код символа перевода каретки. Поэтому и сказал распечатать коды того, что считалось дальше. Тогда наглядно видно что происходит. Почему так рассказываю подробно? Потому, что когда джун приходит на собеседование, то его нечего толком спросить и спрашивают основы. И чтобы не было как однажды ко мне пришел собеседоватся бывший 1С программист лет 40... Спрашиваю: - какое макс число в Int... ? - молчание.... -потом сколько байт в int.. ? - молчание... (прошло 5 мин но методом перебора угадали... и сошлись на 4х) - потом сколько бит в Int? прошло мин 10.... нет ответа... -Хорошо, давайте так: сколько бит в байте - 8... (думаю ура, сейчас мне скажут сколько бит в Int, а там и до 231 - 1) дойдем - итак в Int 4 байта и по 8 бит в каждом, так сколько будет бит в Int? - 24.. - Точно? -Да - Вы уверены? -Да, что я таблицу умножения чтоли не знаю??? (Тут я просто скатился под стол еле сдерживая эмоции) - Мы свяжемся с вами, спасибо за уделенное время.... (Про себя подумал, За что, он так со мною????)
0
|
||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
|||||||||||||||||||||||
| 28.10.2021, 18:41 | |||||||||||||||||||||||
|
Попробуйте на досуге перенаправить вывод из файла в ввод программы ( java YourClass.java < input.txt):
Windows-1251/UTF-8:
Добавлено через 7 минут
1
|
|||||||||||||||||||||||
|
14 / 11 / 3
Регистрация: 13.07.2018
Сообщений: 37
|
||
| 28.10.2021, 19:08 | ||
|
0
|
||
|
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
|
||
| 28.10.2021, 19:26 | ||
![]() Добавлено через 4 минуты Не по теме:
BigInteger/BigDecimal/long/float/double и т. п. Знание абсолютно бесполезное, имхо.
Добавлено через 8 минут
0
|
||
| 28.10.2021, 19:26 | |
|
Помогаю со студенческими работами здесь
20
Счетик не работает, код исполняется только один раз WM_SHOWWINDOW - код исполняется много раз и приложение подвисает
Лишний цикл Как убрать лишний цикл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|