Уважаемые форумчане, доброго дня. Столкнулся со следующей проблемой. В учебнике Г. Шилдта - Java Руководство для начинающих, в одном из заданий требовалось написать вот такую программу: "Напишите программу, которая считывает символы с клавиатуры до тех пор, пока не встретится точка. Предусмотрите в программе счетчик пробелов.
Сведения о количестве пробелов должны выводиться в конце программы".
Я написал вот такую программу, но при вводе пробела и нажатия Enter коретка переходит на следующую строку и эта строка пуста, ничего не происходит. При нажатии верного символа ".", программа как и должна завершается, а счётчик пробелов = 0. Если заменить в коде искомый символ пробела на к примеру скобку, программа работает верно. Помогите разобраться.
import java.io.IOException;
import java.util.Scanner;
public class main {
public static void main(String[] args) throws IOException {
char tochka = '.';
byte probel = 0;
Scanner scan = new Scanner(System.in);
for (; ; ) {
System.out.print("Введите символ - ");
char symbol = scan.next().charAt(0);
if (symbol == ' ') {
System.out.println("Не верный символ");
probel++;
} else {
if (symbol == tochka) {
System.out.println("Точка найдена");
System.out.print("Счётчик пробелов = " + probel);
break;
} else System.out.println("Не верный символ");
}
}
}
}
Арсен
2 уровень
Сравнение введённого символа с пробелом и увеличение счётчика. Нужна помощь!
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
merenoleg
11 марта 2022, 13:02
Самое интересное эта задача приведена до всего что вы тут описали, там используется метод system.in.reader(), я думаю автор бы указал необходимость изучить иные методы чтения данных при вводе с клавиатуры, я тоже не догадался как именно провести проверку, имея знания только по прочитанному материалу
0
Илья QA Automation Engineer в IBS
21 декабря 2021, 23:12
1. Если ты хочешь, чтобы программа выполнялась до наступления какого-то определённого условия, то лучше использовать цикл while или do-while. Цикл for хорош для итераций по коллекциям.
2. При вводе пробела ничего не происходит, поскольку Scanner с конструктором по умолчанию использует паттерн для разделителя: "\p{javaWhitespace}+", что является пробелом.
Можешь скопировать данный код и проверить, как он работает:
0
Арсен
22 декабря 2021, 06:51
Этот код работает отлично, но не могу понять почему в моём коде пробел не читался, а если пробел заменить на скобку к примеру и пытаться ввести в консоле её, то счётчик срабатывал верно. Всё дело было в пробеле, почему он не определяется у меня?
0
Илья QA Automation Engineer в IBS
22 декабря 2021, 08:51
Scanner в конструкторе по умолчанию в качестве разделителя для определения нового слова использует пробел (я во втором пункте написал).
То есть, когда мы вводим пробел, то Scanner его просто игнорирует.
Поэтому лучше использовать метод nextLine() для считывания всей строки до переноса строки, либо использовать какой-то другой Reader для считывания символов из консоли.
0
Арсен
22 декабря 2021, 10:37
Теперь понял, огромное спасибо! Метод nextLine помог.
0
Павел
21 декабря 2021, 13:38
почитай про разницу между nextLine() и next()
Классы лучше наименовать с большой буквы
Переменную byte probel = 0 лучше использовать как char probel = ' '
а для счетчика объявить отдельную переменную int count
0
Арсен
21 декабря 2021, 15:56
Понял про nextline(), что он считывает до символа \n, однако теперь программа и точку не определяет. Может быть из-за-того, что вместо char использовал на этот раз String?
import java.io.IOException;
import java.util.Scanner;
public class main {
public static void main(String[] args) throws IOException {
String tochka = ".";
byte count = 0;
Scanner scan = new Scanner(System.in);
for (; ; ) {
System.out.print("Введите символ - ");
String symbol = scan.nextLine();
if (symbol == " ") {
System.out.println("Не верный символ");
count++;
} else {
if (symbol == tochka) {
System.out.println("Точка найдена");
System.out.print("Счётчик пробелов = " + count);
break;
} else System.out.println("Не верный символ");
}
}
}
}
0
Павел
21 декабря 2021, 16:05
Переменная symbol должна оставаться char
0
Павел
21 декабря 2021, 16:06
Так же как раньше
char symbol = scan.next().charAt(0);
0
Арсен
22 декабря 2021, 06:16
Всё-равно безрезультатно. Что самое интересное, стоит заменить пробел в строке "if (symbol == ' ') {" на любой другой символ и в консоле вводить его, то счётчик срабатывает. Вот я и не могу понять, почему пробел не обрабатывается, а любой другой символ при том же коде обрабатывается.
0
Арсен
22 декабря 2021, 10:38
Разобрался с помощью: использовал следующую конструкцию
char symbol = scan.nextLine().charAt(0);
0
Павел
22 декабря 2021, 10:55
👌👍👍👌
0