Как я повреждаю несколько циклов foreach? [дубликат]

Пожалуйста, уточните мне свой вопрос.

Если вы хотите больше навигационных виджетов или разделов. Просто скопируйте код и вставьте туда, куда вы хотите его добавить. *** Но вам нужно изменить идентификатор раздела и идентификатор виджетов. А раздел и виджеты поддерживаются только в шаблонах, а не в посте. Или вы можете перейти в Макет> добавить новый гаджет> добавить страницы> добавить ссылки и сохранить виджет.

Или.

Если вы хотите добавить дополнительные ссылки в это навигационное меню, просто перейдите в Макет> Выберите «Изменить» этого списка страниц и добавьте новую ссылку там.

32
задан Peter Mortensen 5 January 2019 в 10:11
поделиться

9 ответов

Используйте маркировку на наиболее удаленном цикле и включайте эту маркировку в break оператор, когда Вы захотите выпрыгнуть из всех циклов. В примере ниже, я изменил Ваш код для использования маркировать OUTERMOST:

String valueFromObj2 = null;
String valueFromObj4 = null;
OUTERMOST: for(Object1 object1: objects){
  for(Object2 object2: object1){
    //I get some value from object2
    valueFromObj2 = object2.getSomeValue();
    for(Object3 object3 : object2){
      for(Object4 object4: object3){
        //Finally I get some value from Object4.
        valueFromObj4 = object4.getSomeValue();
        //Compare with valueFromObj2 to decide either to break all the foreach loop
        if( compareTwoVariable(valueFromObj2, valueFromObj4 )) {
          break OUTERMOST;
        }
      }//fourth loop ends here
    }//third loop ends here
  }//second loop ends here
}//first loop ends here
80
ответ дан 27 November 2019 в 19:50
поделиться

Извлеките все циклы в функцию и используйте возврат.

20
ответ дан 27 November 2019 в 19:50
поделиться

Вы могли использовать маркированный оператор завершения. Этот вид повреждения завершается, внешний оператор

См. оператор завершения

6
ответ дан 27 November 2019 в 19:50
поделиться

Посмотрите Переходить Учебное руководство по Java Операторов для самого легкого пути, с помощью маркировки. Можно маркировать любой из для циклов, затем использовать break или continue в сочетании с теми маркировками.

альтернатива использованию маркировок должна использовать return вместо этого. Просто осуществите рефакторинг свой код в вызов метода для обхода потребности использовать маркировки вообще.

2
ответ дан 27 November 2019 в 19:50
поделиться

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

, Какой список objects? Что другой (скорее всего, важный) данные это содержит? Если бы это не слишком много стычки, я ценил бы, если бы Вы предоставили более соответствующий код, так как refactorer во мне становится все легкомысленным только от наблюдения той груды циклов.

2
ответ дан 27 November 2019 в 19:50
поделиться

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

Иначе, что я рекомендую, переписывают тот код, чтобы смочь убежать из цикла корректным способом. При наклонении изменения этот код каким-либо другим способом хорошо затем необходимо будет закончиться к исключениям...

1
ответ дан 27 November 2019 в 19:50
поделиться

Выдать исключение и поймать его вне циклов? Используйте что-то, что это "считало вредным?"

Это немного забавно, когда информатика ставит себя в безвыходное положение ;-)

0
ответ дан 27 November 2019 в 19:50
поделиться

Простое решение состоит в том, чтобы поместить весь поисковый процесс в метод и return, как только у Вас есть ответ.

Однако абстрактная форма Вашего примера кода оставляет некоторые другие рассматриваемые возможности. Например, есть ли способ "индексировать" часть содержания (например, использование Map экземпляры) так, чтобы Вы не использовали циклы "в лоб"?

0
ответ дан 27 November 2019 в 19:50
поделиться

Кроме того, что поддержки Java маркировали повреждение, см. также , это возможный выйти для перед временем в C++, если конечное условие достигнуто? , который является подобным вопросом с некоторыми другими соответствующими решениями.

0
ответ дан 27 November 2019 в 19:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: