Циклы

Открыта

— Привет.

— Привет, Элли!

— Настало… время изучать циклы! Циклы такая же простая штука, как и условия, только интересней. С помощью цикла можно выполнить какую-нибудь команду или блок команд несколько раз. Общий вид цикла такой:

Цикл (пример 1)
while(условие типа boolean)
    команда;
Цикл (пример 2)
while(условие типа boolean)
    блок команд в фигурных скобках

— Все очень просто. Команда или блок команд выполняются снова и снова, пока условие цикла истинно – равно true. Сначала проверяется условие, затем выполняется тело цикла (блок команд), затем снова проверяется условие и снова выполняется тело цикла. И так до тех пор, пока условие не станет ложным.

— А если оно всегда истинно или всегда ложно?

— Если оно всегда истинно, программа никогда не прекратит работать и будет всегда выполнять цикл. А если всегда ложно, то тело цикла не выполнится ни разу.

Примеры:

Код на Java Описание
int i = 3;
while (i >= 0)
{
    System.out.println(i);
    i--;    //уменьшение i на 1
}
3
2
1
0
int i = 0;
while (i < 3)
{
    System.out.println(i);
    i++;   //увеличение i на 1
}
0
1
2
boolean isExit = false;
while (!isExit)
{
    String s = buffer.readLine();
    isExit = s.equals("exit");
}
Программа будет вводить строки с клавиатуры, пока не будет введена строка «exit».
while (true)
    System.out.println("C");
Программа будет вечно печатать на экран букву C.
while (true)
{
    String s = buffer.readLine();
    if (s.equals("exit"))
        break;
}
Программа будет вводить строки с клавиатуры, пока не будет введена строка «exit».
6
Задача
Java Syntax,  4 уровень,  8 лекция
Недоступна
Набираем код
Внимание! Объявляется набор кода на JavaRush. Для этого включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — вовсе не бесполезное занятие, как может показаться на первый взгляд: благодаря ему новичок привыкает к синтаксису и запоминает его (современные IDE редко дают ему это сделать).

— Вроде и не сложно. После условий. Уже хочется попробовать.

Комментарии (74)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
progr5 уровень
9 июня, 15:07
не понимаю, зачем писать так сложно, можно было объяснить по другому, например так: пока i>=0 будет выполняться тело цикла. Вот если бы я до этого не знал про циклы не понял бы вообще что к чему.
Allan Teone9 уровень
15 мая, 16:39
Ребят, вопрос по этому примеру:
String s = buffer.readLine();
    isExit = s.equals("exit");
Согласно обьяснению, в s будет заноситься все, что я печатаю с клавиатуры до тех пор, пока s не станет равна "exit". То есть это не значит, что программа закончит работу, когда после миллиона символов я вдруг введу exit, так? Другими словами, если я введу какой-либо первый символ, и это будет не e, то программа сама по себе работу уже не закончит?
Станислав5 уровень, Санкт-Петербург
17 мая, 09:30
Введенная строка целиком должна быть равна "exit". Если в введенной фразе содержится это слово, то программа не среагирует на выход.
S22 уровень, Минск
вторник, 22:26
Печатаешь и нажимаешь ввод. Только тогда считывается то, что ты напечатал с "exit".
Roman Deryabin8 уровень, Омск
13 мая, 11:46
Может кто-нибудь объяснить из примера про exit? как именно связано boolean со значением в s. Может я не правильно читаю код, но вижу там следущее: isExist - ложь Условие (пока не ложь выполняем){ Считываем строку Устанавливаем isExist(Это же булеан?) значение из введенной строки } И вот мне не понятно в какой момент isExist стал true и как это связано. Может кто материал по этому поводу подкинет. Спасибо)
Алексей9 уровень, Екатеринбург
13 мая, 18:05
А какой именно пример? вот тут:
isExit = s.equals("exit");
сравниваются строки, типа s == exit , соответственно либо равно - true, либо не равно - false. вот тут:
if (s.equals("exit"))
        break;
когда на клавиатуре набрано "exit", то срабатывает break
Roman Deryabin8 уровень, Омск
14 мая, 08:07
Да во всех примерах. Я не понимаю в какой момент булеан стал сравнивать со значением в строке.
isExit = s.equals("exit")
вот тут мы же булеановской переменной присваиваем строку? Даже если и так, то почему значение становится true?
Алексей9 уровень, Екатеринбург
14 мая, 19:10
нет! присваиваем уже результат сравнения String - это не примитивный тип, это класс, и у него есть свои методы "equals" - это метод класса String, который сравнивает строки между собой, и возвращает true если строки одинаковые и false если строки разные. т.е.:
isExit = s.equals("exit")
означает: isExit присвоить результат метода (переменную "s" сравнить с "exit") как-то так. https://metanit.com/java/tutorial/7.1.php
skil16316 уровень, Самара
14 мая, 19:15
isExit = s.equals("exit")
переменная isExit имеет тип boolean , а метод сравнения строк equals тоже возвращает тип boolean и сравнивает строки , получается как бы так : boolean isExit = если строка переданная в консоль ровна строке переданной в метод equals метод вернет значение true. И тогда в цикле while мы получим (не)!true, то есть false, и выйдем из цикла.
Roman Deryabin8 уровень, Омск
18 мая, 14:33
спасибо. теперь понятно)
progr5 уровень
9 июня, 23:35
я одно не понимаю, как мы получим неtrue если здесь isExit = s.equals("exit") мы получаем true
Александр6 уровень, Москва
19 июня, 11:16
мы получаем isExit = true если введём exit с клавы, в цикле у нас будет while(!isExit) - т.е. НЕtrue, а раз неtrue, значит false.
progr5 уровень
21 июня, 19:08
ты не понял что я имею ввиду, изначально значение isExit стоит false boolean isExit = false; далее в while мы выставляем условие while(!isExit), то есть неfalse(я не понимаю почему не true)?? у нас же изначально стоит false значит мы его в цикле переопределяем(в самом условии) или это не так ?
progr5 уровень
21 июня, 19:10
зачем тогда вообще надо это прописывать boolean isExit = false; если можно просто запустить цикл без определения булевуской переменной значения false
Александр6 уровень, Москва
28 июня, 12:26
так знак "!" добавляет НЕ, получается while(не false т.е.true) -> цикл работает т.к. true, потом значение меняется с false на true, а в цикле из за "!" получается не true, т.е. false. Тут всего два значения правда или не правда, если стоит "!" то меняется от текущего на противоположное: правда -> !правда(неправда) неправда -> !неправда(не неправда, т.е. правда)
progr5 уровень
28 июня, 19:30
так я об этом и говорю, здесь while (!isExit) получается !неправда(то есть правда) и цикл будет работать пока правда, получается если логически то наоборот false значение должно же закончить цикл. То есть если мы ведем слово exite цикл по сути должен продолжиться, так как это значение правда, а неправда должна закончить цикл(то есть любое слово кроме exite) или я что то не так понимаю?
progr5 уровень
29 июня, 04:56
все, я уже понял в чем была моя ошибка. Может это поможет кому нибудь. В общем когда мы вводим с клавиатуры слово exit, вот здесь: boolean isExit = false; значение false меняется на boolean isExit = true и соответственно здесь: while (!isExit) в цикле уже будет не значение true а значение неtrue, то есть false. И цикл будет обрываться, так как цикл работает только при истинном условии. Надеюсь мое непонимание до недавнего времени кому-нибудь поможет)
GigaMax12 уровень
22 апреля, 17:47
Повторить всегда полезно)))
gastell06 уровень, Москва
2 апреля, 07:43
Довольно странно, что курс приучает писать код, нарушающий общепринятые правила java. { - никогда не должна переноситься в отдельную строку.
New Year16 уровень, Москва
22 апреля, 17:36
Это сделано для того, чтобы новичкам было визуально наглядно воспринимать написанный код
Sergey13 уровень
15 марта, 06:45
+ 1 шаг к цели "Стать Java-программистом"
Никита19 уровень, Москва
12 февраля, 17:26
Ошибка в примере. Должно быть boolean с маленькой буквы.
Denis7 уровень
13 февраля, 18:55
тоже заметил, а может это и не ошибка, а просто мы пока мало знаем..
Никита19 уровень, Москва
14 февраля, 19:49
нет. это ошибка
Hexronimo23 уровень
15 февраля, 07:44
Нет, это не ошибка, это класс-обертка для boolean.
Владислав23 уровень, Москва
17 февраля, 01:31
В Java над простыми типами есть обертки: Integer, Boolean, Double и т.д. На практике разница в том что boolean не может быть null, ну и прочие плюшки объектов вместо простых значений: ссылка в переменной вместо значения, создание через new, методы объекта вроде toString(), и т.д.
Александр23 уровень, Казань
24 декабря 2018, 09:47
Не слушайте советы ниже про копи-паст )
Alexey Petrov18 уровень
16 июня 2018, 22:19
Только недавно заметил, что код в задачке типа "Набираем код" почти всегда можно скопировать из одного из примеров :)
Евгений10 уровень, Днепр
24 июня 2018, 23:47
:) Все равно молодец :) Многие задачи очень похожи, надо только некоторые места поправить. Я все время копирую код из старых задач :)
Никита Ефремов7 уровень, Санкт-Петербург
20 июля 2018, 18:12
Я тоже.Особенно от InputStream до BufferedReader включительно)
Alex D8 уровень, Москва
15 августа 2018, 14:59
а я стараюсь исключить копи/паст, так рука набивается быстрее, лучше запоминаются особенности и нюансы, доводя часто встречающиеся вещи до автоматизма. плюс тренировка навыка слепого набора на анг языке
Boston17 уровень, Москва
27 декабря 2018, 06:22
Какой смысл учиться тогда?)
Aku24 уровень, Новосибирск
30 декабря 2018, 12:12
Alex D, вразумляя людей своими словами, ты увеличиваешь количество своих конкурентов в будущем.
Ross Fedorov6 уровень, Киев
10 января, 16:15
а я стараюсь исключить копи/паст, так рука набивается быстрее, лучше запоминаются особенности и нюансы, доводя часто встречающиеся вещи до автоматизма. плюс тренировка навыка слепого набора на анг языке Я тоже, иначе, какой смысл учиться?
Булат Хайруллин9 уровень, Казань
25 января, 09:14
Я тоже руки набивал. Как только набил подумал и понял что могу сэкономить время на тупом наборе одного и того же куска кода. Щас копирую.
Майк10 уровень
30 января, 18:53
Я заметил что можно печатать код не совсем как в тексте сверху. К примеру, можно написать не:
public static void main(String[] args)
{

}
а вот так:
public static void main(String[] args) {

}
И это зачтётся. Я уже привык ко второму варианту, потому очень рад что проверки не слишком строгие. P.S. Вопрос для тех кто не копипастит. Вас тоже бесят отсутствующие буквы "ё" в некоторых приложениях для вывода через консоль? "чётные" :)
Elena10 уровень, Москва
17 февраля, 17:18
Alex D, вразумляя людей своими словами, ты увеличиваешь количество своих конкурентов в будущем. )) А вдруг они окажутся не конкурентами, а коллегами, с которыми в одном проекте работать (и бодаться с их копипастом)? Или предшественниками, которые накопипастили и свалили, а ты потом кувыркайся с их кодом )
Roman Afonin32 уровень, Санкт-Петербург
23 февраля, 08:52
ага, очень бесят
gannochka7 уровень, Минск
25 февраля, 20:26
поддерживаю.
АртемGeek25 уровень, Москва
28 февраля, 06:31
Alex D, вразумляя людей своими словами, ты увеличиваешь количество своих конкурентов в будущем. б Aku, хороший программист конкуренции не боится.
Rihard198533 уровень
24 мая 2018, 21:25
Побольше бы таких задач)))