Циклы
Цикл — структура для повторения некоего количества команд несколько раз.
Состоит цикл из условия и собственно циклической части(того, что повторяется)
В java есть 3 типа циклов:
1) С предусловием
2) С постусловием
3) С параметром
Разберемся с каждым из них!
Цикл с предусловием
Основной тип цикла
Общая форма:
while(<Условие>){
<Циклическая часть>
}
Этот цикл работает до тех пор, пока условие верно. Т.к. условие стоит до цикл. части, то при изначально неверном условии цикл не запустится.
Цикл с постусловиеем
Редкий тип. Я не писал ни одной программы с ним.
Общая форма:
do{
<Циклическая часть>
}
while(<Условие>);
Этот цикл работает до тех пор, пока условие верно(в яп Паскаль это не так). Т.к. условие стоит после цикл. части, то при изначально неверном условии цикл проработает один раз как минимум.
Цикл с параметром
Идеален для прохода по массивам и прочим упорядоченным структурам.
Общая форма:
for(<Объявление>;<Условие>;<Итерация>){
<Циклическая часть>
}
Объявление — выполняется один раз на входе в цикл, обычно — объявление переменной-счетчика и присвоение ей начального значения.
Итерация — действие, выполняемое каждое повторение цикла, обычно приближает переменную-счетчик к условию выхода из цикла.
Переменная-счетчик обычно имеет имена i/j и тип int. В любом случае тип должен быть цельночисленным.
Есть еще одна форма этого цикла, о ней мы поговорим в массивах.
Обратите внимание на то, как вы осуществляете выход из циклов while и do..while! В теле цикла должно быть изменение переменной/свойства из условия.
Хотя иногда вечный цикл и полезен. Драйвер мыши/клавы является вечным циклом.
При работе с циклом есть 2 важных ключевых слова: continue и break
continue — переходит у первому оператору цикл. части(делая итерацию, если в for)
break — переходит у первому оператору после цикла(выход)
Примеры:
public class Tutorial {
public static void main(String[] args) {//вывод чисел от 1 до 1000, спасибо ElSemen
for(int i = 1;i<=1000;i++){
System.out.println(i);
}
}
}
public class Tutorial {
public static void main(String[] args) {//вывод простых чисел от 0 до 1000
for(int i = 1;i<=1000;i++){//i — число для проверки на то, что оно простое
boolean flag = true; // флаг для определения, найден ли делитель
for(int j = 2;j<=Math.sqrt(i);j++){//интересная фишка: делители числа распологаются до его половины(+ само число), а простые делители — до корня из этого числа
if(i%j==){//если делится нацелоа
flag = false;
break;//выходит из цикла с j
}
}
if(flag){
System.out.println(i); // если делителей нет=> число простое, значт выводим
}
}
}
}
import java.util.Scanner;
public class Tutorial {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int num = s.nextInt();
while(num != ){
num = s.nextInt();
}
}
}
Лучшие комментарии
2) Могут отсутствовать все кроме условия, получится вот так:
public static void main(String[] args) {//вывод чисел от 0 до 1000
int i = 1;
for(;i<=1000;){
i++;
System.out.println(i);
}
}
}
Но не проще ли использовать while?
3) Аналогично условию в if, &&. Нескольких итераций — пиши прям в коде цикл. части
public class Tutorial {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int num = s.nextInt();
while(num != ){
num = s.nextInt();
}
}
}
Вот пример цикла while. Знаю, что дебильненько.
1) есть ли аналог c#-го foreach?
2)в for <Объявление>;<Условие>;<Итерация> могут отсутствовать некоторые\все эти части? 3)синтаксис записи 2х и более условий(итераций) аналогичен с/c#?
for(<Объявление>;<Условие1>&<Условие2>&...<УсловиеN>;...)
Мой мозг отказался выдавать что-то новое))
По циклам должно быть много вопросов, кидаем!
// вполне красиво
}
Так я же поэтому и спрашивал! В шарпе допустима конструкция вида
for(;; ) {
}
а что бы так сделать while, придётся писать что то типа while(2 != 1) {}, что, имхо, некрасиво.