Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 5

Программа ввода символов

22.05.2019, 19:58. Показов 705. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Потихоньку обучаюсь по книге Шилдта. И вот попалось мне задание, где нужно сделать программку для ввода символов пока не введешь точку. (там еще нужен подсчет пробелов но я до этого пока не дошел). Мне хотелось бы узнать, почему дублируется строка когда "System.out.println("еще раз");" в цикле for при вводе в консоль символа отличного от точки? Большое вам спасибо

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 import java.io.IOException;
 
public class yttty {
    public static void main(String[] args) throws IOException {
        char ch = '.';
        System.out.println("Введите символ: ");
        char read = (char) System.in.read();
 
 
        for( ; read != ch; ) {
 
 
            read = (char) System.in.read();
            System.out.println("еще раз");
          
        }
 
 
 
        System.out.println("bye");
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2019, 19:58
Ответы с готовыми решениями:

Программа ввода символов с клавиатуры
Доброго времени суток. Помогите написать программу, которая получает символы, введенные с клавиатуры, до тех пор, пока не встретитися...

Программа-тест на скорость ввода символов с клавиатуры
Доброго времени суток. Помогите, пожалуйсто, с программой. Вот само задание: Разработать программу-тест на скорость ввода символов с...

Программа ввода символов с клавиатуры с выводом на дисплей
Надо использовать:Клавиатура, дисплей, таймер Что надо вывести:Очистка буфера клавиатуры после ввода 50 символов или каждые 10 с это...

8
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.05.2019, 20:13
lolik848, раз уж начал учиться, изучай с младых ногтей сей инструмент - https://www.cyberforum.ru/java/thread2250765.html

Добавлено через 5 минут
В-общем, по сути, ты вводишь не один символ. При нажатии ентера тебе бонусом остается символ перевода строки
0
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 5
22.05.2019, 21:13  [ТС]
Спасибо за ссылочку на отладку, очень интересно
у меня теперь появилось еще два вопроса) почему 13 строка дублирует введенный символ строки№7?.
можно ли как то дополнить код(не исправляя его) что бы "\n" не мешалась при вводе символов? или же нужно все переделывать? спасибо еще раз)
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.05.2019, 21:19
Цитата Сообщение от lolik848 Посмотреть сообщение
нужно все переделывать?
Да что тут переделывать-то?
Используй сканер и будь счастлив
Java
1
2
3
4
5
6
7
8
9
10
11
12
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Input symbol: ");
        String c;
 
        for (; ; ) {
            c = scan.next();
            if (".".equals(c)) break;
            System.out.println("Once again...");
        }
        System.out.println("Goodbye!");
    }
0
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 5
22.05.2019, 21:35  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
.equals
Я еще не выучил такие страшные слова
спасибо за код, но я хотел бы своими мозгами додумать как оно)

з.ы. на счет сканера все пишут что им не желательно пользоваться, а-ля много багов и тд, вот я и вожусь с read.

з.з.ы собстна вот. но я не совсем доволен, ибо по идее это костыль, а не нормальное решение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.IOException;
 
public class yttty {
    public static void main(String[] args) throws IOException {
        char ch = '.';
    int i = 0;
        System.out.println("Введите символ: ");
                char read = (char) System.in.read();
 
 
                for( ; read != ch; ) {
                if(read == ' ') i++;
 
 
                System.out.println("еще раз");
                read = (char) System.in.read();
                read = (char) System.in.read();
 
                if(read == '.');
                }
 
                System.out.println("Пробелов было введено: " + i);
                System.out.println("bye");
                }
                }
но мне теперь не понятно почему 16 строка считывает введенный символ, а 17 уже \n

ах да, это нормально сидеть над этой задачей пару часов или все совсем плохо?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.05.2019, 21:40
Цитата Сообщение от lolik848 Посмотреть сообщение
а-ля много багов и тд
Чушь
Цитата Сообщение от lolik848 Посмотреть сообщение
это нормально сидеть над этой задачей пару часов или все совсем плохо
Нормально. Я бы сказал, что даже очень полезно. Когда мучаешься с какой-то проблемой довольно долго, много гуглишь, экспериментируешь, то, когда решишь, во-первых доволен будешь как слон, во-вторых приобретенный опыт хорошо закрепится в памяти.
1
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 5
22.05.2019, 21:53  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
доволен будешь как слон
с этим полностью согласен)
Если есть свободная минутка, можешь, пожалуйста, подсказать что за фокусы происходят с методом read у меня в коде?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
22.05.2019, 22:03
Так я ж тебе сказал - read считывает символ с входящего потока, а ты при вводе хочешь не хочешь, посылаешь символ перевода строки. Дебаггер это, кстати, наглядно показывает.

Вникай:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) throws IOException {
        char ch = '.';
        int i = 0;
        System.out.println("Введите символ: ");
        char read;
 
        while ((read = (char) System.in.read()) != ch) {
            if (read == '\n') continue;
            if (read == ' ') i++;
            System.out.println("еще раз");
        }
 
        System.out.println("Пробелов было введено: " + i);
        System.out.println("bye");
    }
2
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 5
22.05.2019, 22:26  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Вникай
Спасибо, я как раз и хотел выяснить, можно ли как то обойти "\n"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2019, 22:26
Помогаю со студенческими работами здесь

Программа с циклом Repeat . until для ввода символов
Программа с циклом Repeat .. until для ввода символов. uses Crt; Var Bukva: Char; begin repeat write(' Ввести букву: ');...

Программа ввода символов с клавиатуры с выводом на дисплей
Вот условие: Нужно написать программу ввода символов с клавиатуры с выводом на дисплей. Используя клавиатура, дисплей, таймер. И нужно...

Программа ввода символов с клавиатуры с выводом на дисплей
В учебнике Жмакина есть задание 6,которое звучит следующим образом: "Программа ввода символов с клавиатуры с выводом на дисплей",...

Программа ввода символов с клавиатуры с выводом на дисплей(Жмакин)
Нужна помощь с написанием программы которая выводит символы введённые с клавиатуры на дисплей. Есть условие что после ввода 35 символов...

[Символьная строка] После ввода количества символов в символьной строке, программа прекращает работу
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <locale> int main() { setlocale(LC_ALL, "RUSSIAN"); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru