1. Цикли в живота ни

Много често животът ни изисква да извършваме едни и същи действия много пъти. Да предположим например, че трябва да сканирам document, състоящ се от много страници. Че повтаряме същата proceduresа отново и отново:

  • Поставете първата page на скенера
  • Натиснете бутона за сканиране
  • Поставете следващата page на скенера

Това е трудно да се направи ръчно. Би било хубаво, ако този процес може по няHowъв начин да бъде автоматизиран.

Или разгледайте друг пример: да кажем, че искам да маркирам всички непрочетени имейли във входящата си поща като спам. Имало едно време трябваше да избирам всеки имейл един по един и да го маркирам като спам.

Но програмистите са мързеливи, така че автоматизираха този процес отдавна: сега просто избирате произволен списък с писма и щракнете върху „маркиране като спам“, след което вашият имейл клиент преминава през списъка и премества всеки имейл в папката за спам.

Какво можем да кажем тук? Супер удобно е, когато компютър or програма може да изпълни стотици or хиляди монотонни операции с едно щракване. И сега ще научите How да направите и това.


2. whileпримка

Операторът if-else значително разшири възможностите ни за програмиране, като направи възможно писането на програми, които изпълняват различни действия в различни ситуации. Но има още нещо, което ще направи нашите програми порядък по-мощни — цикли .

Java има 4 вида цикли: while, forи for-each. do-whileСега ще разгледаме първия от тях.

Цикълът whileе много прост. Състои се само от две части: condition и тяло на цикъл . Тялото на цикъла се изпълнява отново и отново, докато conditionто е true. Като цяло един whileцикъл изглежда така:

while (condition)
   statement;
Нотация за whileцикъл с един оператор
while (condition)
{
   block of statements
}
Нотация за whileцикъл с блок от изрази

Много е просто. Операторът or блокът от изрази се изпълнява отново и отново, докато conditionто на цикъла е равно на .true

Ето How работи: първо се проверява conditionто . Ако е вярно, тогава тялото на цикъла се изпълнява ( изявлението or блокът от изрази ). След това conditionто се проверява отново и тялото на цикъла се изпълнява отново. И така докато conditionто стане невярно.

Ако conditionто винаги е вярно , тогава програмата никога няма да спре да работи. Той ще остане постоянно в цикъла.

Ако conditionто е невярно още при първата проверка , тогава тялото на цикъла няма да бъде изпълнено нито веднъж.


3. Примери за цикли

Ето някои практически примери за цикли в действие.

Код Обяснение
int n = 5;
while (n > 0)
{
   System.out.println(n);
   n--;
}
На екрана ще се изведат 5 реда:
5
4
3
2
1
Код Обяснение
int  n = 0;
while (n < 10)
{
   System.out.println(n);
   n++;
}
На екрана ще се изведат 10 реда:
0
1
...
8
9
Код Обяснение
Scanner console = new Scanner(System.in);
while(console.hasNextInt())
{
   int x = console.nextInt();
} 
Програмата чете числата от клавиатурата, докато се въвеждат числа.
Код Обяснение
while (true)
   System.out.println("C");
Програмата безкрайно ще отпечатва буквата Cна екрана.
Код Обяснение
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
Програмата ще чете редове от клавиатурата

докато exitсе въведе.

В предишния пример equals()методът се използва за сравняване на низове. Ако низовете са равни, функцията ще върне true. Ако низовете не са равни, тогава ще се върне false.



4. Цикъл в цикъл

Докато научихте за условните изрази, видяхте, че можете да ги използвате за прилагане на сложна логика чрез комбиниране на множество условни изрази. С други думи, чрез използване на ifизраз вътре в ifизраз.

Можете да направите същото с цикли. За да напишете цикъл в рамките на цикъл, трябва да напишете втория цикъл вътре в тялото на първия цикъл. Ще изглежда нещо подобно:

while (condition for outer loop)
{
   while (condition for inner loop)
   {
     block of statements
   }
}
whileцикъл (с блок от изрази ) вътре в друг whileцикъл

Нека да разгледаме три задачи.

Задача 1 . Да кажем, че искаме да напишем програма, която показва думата Momна екрана 4 пъти. Цикълът е точно това, от което се нуждаем. И нашият code ще изглежда така:

Код Обяснение
int  n = 0;
while (n < 4)
{
   System.out.println("Mom");
   n++;
}
На екрана ще се изведат 4 реда:
Mom
Mom
Mom
Mom

Задача 2 . Искаме да напишем програма, която показва 5 букви As на един ред. За да направим това, отново се нуждаем от цикъл. Ето How ще изглежда codeът:

Код Обяснение
int n = 0;
while (n < 5)
{
   System.out.print("A");
   n++;
}
Вместо println()ще използваме print(). В противен случай всяка буква A ще завърши на отделен ред.

Изходът на екрана ще бъде:
AAAAA

Задача 3 . Искаме да покажем правоъгълник, съставен от буквата As. Правоъгълникът трябва да се състои от 4 реда по 5 колони. За да постигнем това, сега се нуждаем от вложен цикъл. Просто ще вземем нашия първи пример (този, в който извеждаме 4 реда) и ще заменим codeа за извеждане на един ред с codeа от втория пример.

Код Обяснение
int n = 0;

while (n < 4) { int m = 0;
while (m < 5) { System.out.print("A"); m++; }
System.out.println(); n++; }
 
Външният контур е лилав. Той използва nпроменливата, за да преброи броя на повторенията на цикъла.

Вътрешният контур е зелен. Той използва mпроменливата, за да преброи броя на повторенията на цикъла.

Трябва изрично да преместим курсора на следващия ред, след като вътрешният цикъл приключи. В противен случай всички букви, които програмата отпечатва, ще бъдат на един ред.

Изходът на екрана ще бъде:
AAAAA
AAAAA
AAAAA
AAAAA

Външният и вътрешният цикъл трябва да използват различни променливи, за да преброят броя на повторенията на цикъла. Също така трябваше да добавим System.out.println()командата след вътрешния цикъл, тъй като този цикъл показва буквата As на същия ред. След като се покажат буквите на даден ред, някой трябва да премести курсора на нов ред.



5. Сравняване на цикли Java срещу Pascal

Много от вас са учor Паскал в гимназията. За да ви бъде по-лесно да разберете материала тук, погледнете това сравнение на whileцикли, написани на Pascal и Java. Ако не знаете Паскал, просто пропуснете тази част.

Паскал Java
i := 3;
While i >= 0 Do
   Begin
      WriteLn(i);
      i := i - 1;
   End;
int i = 3;
while (i >= 0)
{
   System.out.println(i);
   i--;
}
i := 0;
While i < 3 Do
   Begin
      WriteLn(i);
      i := i + 1;
   End;
int i = 0;
while (i < 3)
{
   System.out.println(i);
   i++;
}
IsExit := False;
While Not isExit Do
   Begin
      ReadLn(s);
      isExit :=  (s = 'exit');
   End;
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
While True Do
   WriteLn('C');
while (true)
   System.out.println("C");
While True Do
   Begin
     ReadLn(s);
     If s = 'exit' Then
       Break;
   End;
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}