Вот смотрю пример кода и нашел тут вот такое
public static List<Word> detectAllWords(int[][] crossword, String... words) {
List<Word> wordList = new ArrayList<>();
int[][] searchDirections = new int[][] {
{0, 1},
{1, 1},
{1, 0},
{1, -1},
{0, -1},
{-1, -1},
{-1, 0},
{-1, 1},
};
for (String word : words) nextWord:{
for (int i = 0; i < crossword.length; i++) {
for (int j = 0; j < crossword[i].length; j++) {
if (word.charAt(0) == crossword[i][j])
for (int directions = 0; directions < searchDirections.length; directions++) {
int tmp_i = i,
tmp_j = j,
wordPos = 1;
while (wordPos < word.length()) {
tmp_i += searchDirections[directions][0];
tmp_j += searchDirections[directions][1];
if (tmp_i < 0 || tmp_i >= crossword.length || tmp_j < 0 || tmp_j >= crossword[tmp_i].length)
break;
if (word.charAt(wordPos) != crossword[tmp_i][tmp_j])
break;
else if (wordPos == word.length() - 1) {
Word tWord = new Word(word);
tWord.setStartPoint(j, i);
tWord.setEndPoint(tmp_j, tmp_i);
wordList.add(tWord);
break nextWord;
}
wordPos++;
}
}
}
}
}
return wordList;
}
Так вот первый раз вижу вот такое условие
for (String word : words) nextWord:{
и потом это как то привязано к строке ниже
break nextWord;
подскажите как это работает или где есть что почитать?
Это оператор break
с меткой. В случае его срабатывания происходит переход к коду, который находится за блоком кода с заданной меткой.
Его удобно использовать для выхода из вложенных циклов. Оператор break
без метки позволяет перейти только на один уровень вверх, а с помощью break label
можно сразу выйти из цикла любой вложенности.
Здесь он используется для выхода из вложенного цикла (из 5-го уровня происходит переход сразу к циклу первого уровня).
Прочитать можно в любом пособии по Java.
Простой пример:
public class Main {
public static void main(String[] args) {
label: for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
System.out.println("i = " + i + ", j = " + j);
if (i == 2 && j == 3) {
break label;
}
}
}
System.out.println("End");
}
}
Вывод на консоль:
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 0, j = 3
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
End
PS. break label
следует использовать только при крайней необходимости, так как он затрудняет восприятие кода.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Изучаю Web разработку на java, в качесте источника использую это видео https://wwwyoutube
Мне нужно отправить письмо на почту с андроида, без сторонних приложений
Как уменьшить размер item'а чтобы его размер был ограничен его содержанием?