for vs while - LOOP

У меня есть эти маленькие сомнения на loops в java.

  • Каково различие между for и while?
  • Он лучше while для короткого цикла?
6
задан 22.01.2017, 17:57
0 ответов

Структура Повторения

Структура повторения - структура, которая группирует решения о коде, вышеупомянутые решения работают снова и снова до тех пор, пока x условие не станет фальшивым.

1. while

1.1 Синтаксис

while(condicion){
    ... // sentencias
}

1.2 Описание

Структура контроля while, получи так называемый параметр condicion что будет оценен после того, как будет инициализировать каждое повторение. condicion это стоимость booleano, это значит, что он только может содержать два типа стоимости true или false . Если в каком-то моменте condicion он возвращается false цикл ( loop ) он закончится.

Цикл заканчивается в первом случае, в котором condicion вернитесь false.

1.3 Пример #1

int i = 0;
while(i < 11) {
    System.out.println(i);
    i++;
}

В предыдущем цикле, условие i < 11 , изначально i = 0 из-за которого, оценив ее в условии i < 11 Этот содержит стоимость true следовательно esctructura продолжается, чтобы выполнять решения, содержавшие в нем, выполнив i++ в первом повторении стоимость i изменись, сейчас i = 1, esctrucutra повторяет предыдущий процесс для этого новая стоимость, оценивается i внутри выражения, если i он содержит true тогда переходят, чтобы выполнять i++.

  • P: До каких пор заканчивается цикл?
  • R: До тех пор, пока i >= 11 , это означает, что цикл заканчивается когда i = 11 так как i увеличь в шаг 1, i++ работало общее количество 11 разы.

Вывод программы:

0
1
2
3
4
5
6
7
8
9
10

2. for

2.1 Синтаксис

for(variables ; condicion ; instrucciones){
    ... // sentencias
}

2.2 Описание

Структура контроля for, противоположный в while, разделяется на части в 3 частях, variables это место, назначенное для заявления локальных переменных, которые будут доступными только внутри структуры. condicion он интерпретируется равно как в структуре while, в конце концов instrucciones это место, назначенное, чтобы размещать решения, которые будут работать после повторения

Цикл заканчивается в первом случае, в котором condicion вернитесь false.

2.3 Пример #2

for(int i = 0, j = 10 ; i < 11 ; i++ , j--){
    System.out.println(i + "," + j);
}

В предыдущем примере, создаются две локальные переменные i и j, оба типа int, с начальной стоимостью i = 0 , j = 10 , условие - то же самое, что пример #1. Выполнив решение System.out.println(i + "," + j); будут работать adicionalmente решения i++ и j-- что увеличивают стоимость i и decrementan стоимость j соответственно.

Вывод программы:

0,10
1,9
2,8
3,7
4,6
5,5
6,4
7,3
8,2
9,1
10,0

3. Превращение между структурами повторения

3.1 for в while

Это превращение несомненно - самый простой из всех (straightforward)

for(variables ; condicion ; instrucciones){
    ... // sentencias
}

Он эквивалентный в

variables;
while(condicion){
    ... // sentencias
    instrucciones;
}

Объяснение простое, они объявят себе переменные раньше, выражение, которое будет нужно оценивать, - то же самое, в конце концов к решениям добавляют решения пост-повторение в конце структуры.

Пример: Превращение примера #2

for(int i = 0, j = 10 ; i < 11 ; i++ , j--){ System.out.println(i + "," + j); }

int i =  0,
    j = 10;
while(i < 11){
    System.out.println(i + "," + j);
    i++;
    j--;
}

3.2 while в for

Противоречащий превращению for - while, превращение while - for она не является такой очевидной, так как преобразование

while(condicion){
    ... // sentencias
}

В

for(; condicion ;){
    ... // sentencias
}

Он не является очень полезным и заканчивается семантическими потерями. Но не все плохое, к счастью, ранее было открыто, что

variables;
while(condicion){
    ... // sentencias
    instrucciones;
}

Он эквивалентный в

for(variables ; condicion ; instrucciones){
    ... // sentencias
}

если имеется один while описанной формы ранее, превращения в for она простая. обнаруживаются сначала переменные, использованные внутри while, потом конечные преобразования в эти же самые переменные.

Пример: Превращение примера # 1

int i = 0; while(i < 11) { System.out.println(i); i++; }

for(int i = 0; i < 11 ; i++){
    System.out.println(i);
}   

Отвечая

while лучше для короткого цикла?

Он будет зависеть главным образом от структуры while, помня, что while и for это полностью эквиваленты, выбор одной не затронет функциональность кода, тем не менее выбор одной на другой, сделает самый читабельный код, а именно более легким для того, чтобы быть прочитанным.

Например while примера # 1, эквивалент в for он закончился лучшим кодом.

Тем не менее следующий while

while(buffer.nextChar()!= EOF){
    ...         
}

Ваш эквивалент в for ухудши читабельность кода

for(;buffer.nextChar()!= EOF;){
    ...
}

Каково различие между переключателем, for и while?

for и while это структуры повторения.

switch это структура выбора, очень сходная с некоторыми if's укрытые, я не войду в детали, так как уже она была отвечена из-за Quidi90

14
ответ дан 03.12.2019, 17:35
  • 1
    помня, что while и for - полностью эквиваленты, это не является верным!!! –  22.01.2017, 19:18
  • 2
    Это полностью эквиваленты, совсем for может преобразовываться в while и совсем while по for поэтому эквивалентные, если ты хочешь demostració n будь достаточно определить funció n помощник booleana с таблицей принадлежности en.wikipedia.org/wiki/For_loop#Equivalence_with_while-loops –  22.01.2017, 19:29
  • 3
    они не являются эквивалентными во время выполнения, о чем ты упоминаешь, уходит больше в синтаксис, просвет, что они превращаются –  23.01.2017, 00:07
  • 4
    кроме того, что индекс for не может быть измененным в теле for, взамен переменная, которая зависит while, если он изменяется, видит мой ответ –  23.01.2017, 01:29
  • 5
    Ну, это целая documentació n, превосходный aportació n, спасибо! –  27.01.2017, 21:36

Когда использовать FOR?

for он используется, когда известен конец повторения примера:

  for(int i=0; i<100; i++){
***notese que `i` no puede ser  modificado, si se modifica ocasionara errores de ejecucion***

    }

анализируя в коде наверху,

i инициализируйся под 0

i он обратится до 100 (мы знаем, где он закончит цикл)

Когда использовать WHILE?

while он используется, когда он не известен, когда законченная повторение пример:

while(n%2==0){



n=((n*100)/3)+5;
}

заметьте себе, что n будь изменен, это основное, чтобы понимать и дифференцировать, когда использовать for или while

анализируя elcodigo наверху:

Цикл while зависит от переменной n.--> while(n%2==0){

переменная n измени стоимость-> n=n/10; по этой причине он не известен, когда он заканчивался, и это будет зависеть от стоимости n.

следовательно вычисления могли бы становиться показательными.

Когда использовать Swith?

swith он используется для того, чтобы соединять парами стоимость переменной со случаями и кроме того, что случаи должны быть конечными:

пример: месяцы anio

switch(mes) {
   case 'enero':
     //hacer algo
     break;
   case 'febrero':
     //hacer algo
     break;
   case 'marzo':
     //hacer algo
     break;
   .
   .
   .
   //etc hasta diciembre
}

while лучше для короткого цикла?

НЕТ, предполагается, что цикл короткий, когда известен настоящий конец, следовательно подходящее состоит в том, чтобы использовать for

Дополнительная информация:

Время выполнения for(for простой, не укрытый) он n время выполнения while больше в "n", так как говорится о показательных повторениях

conclucion: это не то же самое использовать for и while в любом случае, из-за которого он состоял бы в том, чтобы убивать в муху с бомбой :)

-3
ответ дан 03.12.2019, 17:35
  • 1
    Полностью фальшивый, ты противоречишь teorí в aná lisis алгоритмов, у одного for нет одного " время ejecució n" равный 1, на основании qué ты утверждаешь, в котором while говорится о показательных повторениях. Достаточно приносить твой có я говорю сборщику, и verá s, что нет никакого различия между while и for... в конце всего это простой условный разрыв. –  22.01.2017, 19:35
  • 2
    ú nica различие - alocació n переменных, так как for, создает новый scope с Вашей соответствующей таблицей sí mbolos, эти детали на низком уровне тратят фактор k циклы, презренные в языке высоты уровня. –  22.01.2017, 20:46
  • 3
    Один против примера того, что for не - комплексности asintó костариканская 1, достаточно алгоритма bú squeda последовательный, cuá l у него есть комплексность asintó костариканская Омега (n), не Омега (1) гораздо меньше O (1) en.wikipedia.org/wiki/Linear_search , и ahí contradicció n в твой afirmació n. –  22.01.2017, 20:55
  • 4
    В общем комплексность asintó костариканская, или верхняя квота asintó костариканская (оба отличные), они не зависят только от condicion никогда структуры iteració n. en.wikipedia.org/wiki/Analysis_of_algorithms –  22.01.2017, 20:58
  • 5
    Если ты нравишься продолжать с дискуссией chat.stackexchange.com/rooms/52254/analisis-de-algoritmos , уже не comentaré в этом дорожном столбе, чтобы избегать запутывать зрителей, если он перемещает модератор и считает ú til удалять комментарии, сделайте это. –  22.01.2017, 21:08

Я начинаю тем, что объясняю переключатель. В отличие от других 2 не реализует никакого типа цикла - скорее следование if.

switch(day) {
   case 'lunes':
     contador++;
     break;
   case 'martes':
     contador += 2;
   case 'miercoles':
     contador += 3;
     break;
   case 'default':
     contador = 2;
     break;
}

В этом случае мы используем переменную day, чтобы реализовывать переключатель. Если Ваша стоимость будет 'понедельником', сложит один в изменчивая счетчик. Если это будет 'среда', он прибавится 3. Взамен, если он будет 'во вторник, он прибавится 5, благодаря тому, что не существует инструкция break, и как только ты входишь в переключатель ты это пробегаешь до конца если только ты не находился break. С другой стороны в случае, если он не будет стоить ни одной из другой стоимости существует случай default (что не является обязательным), он был бы else переключателя.

Из-за другой стороны while и for они служат для того, чтобы реализовать циклы. Различие коренится в, что for специализирующийся (оптимизированный), чтобы реализовывать циклы типа, я нуждаюсь в индексе, который выполняет условие, и делать что-то с этим индексом. Следовательно каждый раз, когда выполняется структура for (не импортируя размера, который нужно пробегать) было бы нужно использовать for.

1
ответ дан 03.12.2019, 17:35
  • 1
    Первая часть, acaerca переключателя, está вне темы. –  14.03.2017, 05:17
  • 2
    До того, как он издавал вопрос habí в место: ¿ Cuá l - различие между переключателем, for и while? Así в который я не верю, что esté вне места. –  21.03.2017, 14:26