Данную задачу:
Напишите программу, которая получает символы, введенные с клавиатуры, до тех пор, пока не встретится точка. Предусмотрите в программе счетчик пробелов. Сведения о количестве пробелов должны выводиться в конце программы.
Решил так:
public static void main(String args[])
throws java.io.IOException {
char choice, exit;
int space;
exit = '.';
space = 0;
for (; ; ) {
System.out.println("Press any key please. Press '.' for exit:");
choice = (char) System.in.read(); // Получили символ от пользователя.
if (choice == ' ') space += 1; // Добавили пробел если он был нажат.
else if (choice == '.') System.out.print("Programm stopped by exit. " +
"Space pressed " + space + " times."); /* Закончили на точке и показали пробелы. */
}
}
Вывод получается такой.
Press any key please. Press '.' for exit:
Press any key please. Press '.' for exit:
Programm stopped by exit. Space pressed 2 times.Press any key please. Press '.' for exit:Press any key please. Press '.' for exit:
Почему строки повторяются и как убрать дубликаты?
.
вы не останавливаете цикл, так что программа будет работать бесконечноПервую проблему можно решить вынесением сообщения за цикл, а вторую - добавлением break
-а при нахождении .
:
char choice, exit;
int space;
exit = '.';
space = 0;
System.out.println("Press any key please. Press '.' for exit:");
for (; ; ) {
choice = (char) System.in.read(); // Получили символ от пользователя.
if (choice == ' ')
{
space += 1; // Добавили пробел если он был нажат.
}
else if (choice == '.')
{
System.out.print("Programm stopped by exit. " +
"Space pressed " + space + " times."); /* Закончили на точке и показали пробелы. */
break;
}
}
А ещё в коде можно немного прибраться:
int spacesCount = 0;
boolean gotExitSymbol = false;
System.out.println("Press any key please. Press '.' for exit:");
while (!gotExitSymbol)
{
char symbol = (char)System.in.read(); // Получили символ от пользователя.
if (symbol == ' ')
{
spacesCount++; // Добавили пробел если он был нажат.
}
else if (symbol == '.')
{
gotExitSymbol = true;
}
}
System.out.println("Program stopped by exit. " + "Space pressed " + spacesCount + " times."); /* Закончили на точке и показали пробелы. */
Убрал лишние переменные, другие переименовал, использовал ++
вместо += 1
, а while (true)
(он же for (; ; )
) заменил на while
с флагом (очень не люблю while (true)
за то как он выглядит)
Или несколько короче при использовании в while
сложного условия вместо флага:
int spacesCount = 0;
System.out.println("Press any key please. Press '.' for exit:");
char symbol;
while ((symbol = (char)System.in.read()) != '.')
{
if (symbol == ' ')
spacesCount++; // Добавили пробел если он был нажат.
}
System.out.println("Program stopped by exit. " + "Space pressed " + spacesCount + " times."); /* Закончили на точке и показали пробелы. */
Виртуальный выделенный сервер (VDS) становится отличным выбором
Мне показали приложение в App Store в котором реклама показывается даже в авиарежиме, причём каждый раз разная (речь о Rewarded Video и Interstitial)Как это...
Возможно ли изменить заставочный экран на телефоне Android программно(на изображение, например)? Если да, то как, используя Java
Как после ввода слова, вывести в консоль все буквы а не только первую? С применением forEach не получиться решить второй вопрос по моему̶К̶а̶к̶...