Данную задачу:
Напишите программу, которая получает символы, введенные с клавиатуры, до тех пор, пока не встретится точка. Предусмотрите в программе счетчик пробелов. Сведения о количестве пробелов должны выводиться в конце программы.
Решил так:
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."); /* Закончили на точке и показали пробелы. */
Сборка персонального компьютера от Artline: умный выбор для современных пользователей