Конвертирование циклов (вопрос Java-новичка) - PullRequest
1 голос
/ 17 апреля 2011

Всегда ли конвертация между циклами работает следующим образом? или есть какая-то ситуация, которой нет? и какой самый быстрый способ проверить это, когда я решаю такой вопрос на экзамене?

Для цикла:

 for(xx;yy;zz)
    { 
       aa
    }

Во время цикла:

    xx
    while(yy)
    {
      aa
      zz
    }

Делай пока:

      xx
      do
      { 
        aa
        zz
      }
    while(yy)

Ответы [ 5 ]

5 голосов
/ 17 апреля 2011

У вас есть пара ошибок. В частности, цикл do-while является неправильным, поскольку он всегда выполняет хотя бы одну итерацию, что не относится к циклам for и while.

for(x(); y(); z())
{ 
   a();
}

x();
while(y())
{
  a();
  z();
}

x();
if(y())
{
  do
  { 
    a();
    z();
  } while(y())
}
1 голос
/ 02 мая 2018

Существуют некоторые фундаментальные различия между для цикла , в то время как цикл и цикл выполнения , о которых вам следует знать:

1) Циклы for лучше всего использовать, когда вы знаете, сколько раз вам нужно что-то зациклить.Например, при зацикливании массива чисел вам нужно будет зацикливаться столько раз, сколько есть элементов в массиве.

Для структуры цикла:

For loop structure

2) Хотя циклы лучше всего использовать, когда вы не знаете, сколько раз вам нужно что-то зациклить.Например, при чтении строк текста из файла программа будет продолжать чтение до тех пор, пока не достигнет конца файла, не зная заранее, сколько строк будет прочитано.

Структура цикла while:

While loop structure

3) Циклы Do-while (также известные как циклы do) лучше всего использовать, когда вы не знаете, сколько раз вам нужно зациклить что-то И вы хотитевыполнить цикл хотя бы один раз.Например, если программа непрерывно принимает ввод от пользователя и выводит его до тех пор, пока пользователь не введет букву «q», то вы будете использовать цикл do-while, поскольку вам потребуется принимать ввод пользователя хотя бы один раз.

Структура цикла Do-while:

Do-while loop structure

Источник: Циклы в Java - Ultimate Guide

0 голосов
/ 26 января 2017
// This class demonstrates the transliteration
// between while, for, and for-each loop syntax
public class LoopTest {

    // This method definition showcases do-while-loop syntax 
    public void doWhileLoop(Person[] people) {
        int i=0;
        do {
            Person p = people[i];
            System.out.println(p.getName());
            i++;
        }while(i<people.length);
    }

    // This method definition showcases while-loop syntax 
    public void whileLoop(Person[] people) {
        int i=0;
        while(i<people.length) {
            Person p = people[i];            
            System.out.println(p.getName());            
            i++;
        }
    }

    // This method definition showcases for-loop syntax    
    public void forLoop(Person[] people) {
        for(int i=0; i<people.length; i++) {
            Person p = people[i];            
            System.out.println(p.getName());             
        }
    }

    // This method definition showcases for-each-loop syntax        
    public void forEachLoop(Person[] people) {
        for(Person p : people) {
            System.out.println(p.getName()); 
        }
    }
}
0 голосов
/ 17 апреля 2011

Остальные участники рассмотрели семантику исполнения.Но я хотел добавить семантику области видимости переменной.

В Java вы можете сделать это:

for (Iterator<String> i = localList.iterator(); i.hasNext(); ) {
  String element = i.next();
  if (...) {
    i.remove();
  }
}

for (Iterator<String> i = importList.iterator(); i.hasNext(); ) {
  String element = i.next();
  if (...) {
    i.remove();
  }
}

Где переменная 'i' используется дважды.

Вчтобы перевести это в циклы while с правильной областью видимости, вам нужно использовать дополнительные блоки кода:

{
  Iterator<String> i = localList.iterator();
  while (i.hasNext()) {
    String element = i.next();
    if (...) {
      i.remove();
    }
  }
}

{
  Iterator<String> i = importList.iterator();
  while (i.hasNext()) {
    String element = i.next();
    if (...) {
      i.remove();
    }
  }
}

Обратите внимание, как дополнительный { ... } позволяет использовать те же имена переменных.

Хотя это не так важно в Java, в таких языках, как C ++, область действия имеет важные последствия, помимо возможности использовать одни и те же имена переменных.Дополнительный блок влияет на разрушение объекта, IIA (создание объекта) и т. Д.

0 голосов
/ 17 апреля 2011

Единственное отличие между оператором for и оператором while или do-while состоит в том, что for также определяет инициализацию и приращение итератора.
Например, давайте возьмемIterator, который в Java можно использовать для перебора векторов или чего-либо подобного (например, связанный список):

//we already have a variable v whom type implements List interface;
for (Iterator vectorIterator = v.iterator(); vectorIterator.hasNext(); ) {
    //I left blank after the last ";" because there should come
    // the increment statement, and I need to store the .next() return value.

    int current = vectorIterator.next();
}

А вот версия while:

Iterator vectorIterator = v.iterator();
while (vectorIterator.hasNext()) {
    int current = vectorIterator.next();
}

do-while очень похож на while версию.

Я дал вам этот более сложный пример, чтобы показать вам, что все, что вы делаете с while, независимо от того, насколько сложным, вы можете делать с for.

РЕДАКТИРОВАТЬ: оператор do-while существует в качестве альтернативы while, с той лишь разницей, что условие цикла проверяется на итерации.Таким образом, вы можете сделать эквивалент для приведенного выше примера, используя do-while, например:

Iterator vectorIterator = v.iterator();
if (vectorIterator.hasNext()) {
    do {
        int current = vectorIterator.next();
    } while (vectorIterator.hasNext());
}

, но в этом нет никакой цели.Вы должны использовать каждый инструмент для своих целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...