14 августа 2011 14.08.11 31 2386

Туториал по java №4

+9

<< >>

Циклы

Цикл — структура для повторения некоего количества команд несколько раз.
Состоит цикл из условия и собственно циклической части(того, что повторяется)

В 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();
                }

}

}


Лучшие комментарии

1) Опиши плз, на шарпе немного прогил
2) Могут отсутствовать все кроме условия, получится вот так:
public class Tutorial {

        public static void main(String[] args) {//вывод чисел от 0 до 1000
                int i = 1;
                for(;i<=1000;){
                        i++;
                    System.out.println(i);
                }
        }

}


Но не проще ли использовать while?
3) Аналогично условию в if, &&. Нескольких итераций — пиши прям в коде цикл. части
[UPD]:
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();
                }

        }

}


Вот пример цикла while. Знаю, что дебильненько.
Да-да, они(вопросы) есть =)
1) есть ли аналог c#-го foreach?
2)в for <Объявление>;<Условие>;<Итерация> могут отсутствовать некоторые\все эти части? 3)синтаксис записи 2х и более условий(итераций) аналогичен с/c#?
for(<Объявление>;<Условие1>&<Условие2>&...<УсловиеN>;...)
Приостанавливаю производство туторов для начинающих с бешеной скоростью. Теперь — раз в 2 дня
Нужны примеры на другие циклы?
Мой мозг отказался выдавать что-то новое))

По циклам должно быть много вопросов, кидаем!
Спасибо))) Да знаю, изучал его полгода
Но не проще ли использовать while?

Так я же поэтому и спрашивал! В шарпе допустима конструкция вида

for(;; ) {
}

а что бы так сделать while, придётся писать что то типа while(2 != 1) {}, что, имхо, некрасиво.
Эх, мнеб с паскалем поработать, кто нибудь знает хорошие туториалы?
Экзамены сдавать, а там паскаль надо, а за каникулы я уж все забыл. А че, аллгоритмы и массивы теже?
Ну заранее готовлюсь))) А что делать, охото в высший поступить) Чтож жаль, что не знаешь
далековато вы от темы отошли =) при чём тут вообще паскаль, экзамены и высший? о_О
наконец то! я минут 40 тупил, пытаясь понять что это. даже писал где то раньше. теперь всё встало на свои места =)
Информатику на всякий случай, где то может и понадобится, а вот математику и ФИЗИКУ, это просто смерть
Огромное пасибо)))) Уже ухожу дабы не мешать вашим урокам
хм, да, не знал о такой возможности.
Читай также