Break-continue без вспомогательной логической переменной?
В Java у меня есть такой код:
boolean contains;
for (int i = 0; i < n; i++) {
// get the current matrix value
t = A[i][j];
// check if it has been already considered
contains = false;
for (int z = 0; z < l; z++) {
if (arrays[z].contains(t)) {
contains = true; break;
}
}
if (contains) continue;
...
}
Можно ли использовать метку, затем выпрыгнуть из внутреннего цикла и продолжить без логической переменной contains
?
Мне нужно делать break-continue и не ломаться от всех петель.
2 ответа
Решение
outerLoop:
for (int i = 0; i < n; i++) {
// get the current matrix value
t = A[[i]][j];
// check if it has been already considered
for (int z = 0; z < l; z++) {
if (arrays[z].contains(t)) {
continue outerLoop;
}
}
}
Использование меток приводит к тому, что спагетти-код делает ваш код менее читабельным.
Вы можете извлечь внутренний цикл for в своем собственном методе, возвращая логическое значение:
private boolean contains(/* params */) {
for (int z = 0; z < l; z++) {
if (arrays[z].contains(t)) {
return true;
}
}
}
и использовать его во внешнем цикле for
for (int i = 0; i < n; i++) {
// get the current matrix value
t = A[[i]][j];
// check if it has been already considered
if (contains(/*params*/))
continue;
...
}