Jak wyłamać się z zagnieżdżonych pętli w Javie?
Mam zagnieżdżoną konstrukcję pętli w ten sposób:
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
// Do something and break...
break; // Breaks out of the inner loop
}
}
}
Teraz Jak mogę wyrwać się z obu pętli. Patrzyłem na podobne pytania, ale żadne Nie dotyczy konkretnie Javy. Nie mogłem zastosować tych rozwiązań, ponieważ większość używanych gotos.
Nie chcę umieszczać wewnętrznej pętli w innej metodzie.
Update: nie chcę ponownie uruchamiać pętli, po złamaniu kończę z wykonaniem bloku pętli.
30 answers
Podobnie jak inni odpowiadający, zdecydowaniewolę umieścić wewnętrzną pętlę w innej metodzie. Ta odpowiedź pokazuje tylko, w jaki sposób można spełnić wymagania zawarte w pytaniu.
Możesz użyć break
z etykietą dla zewnętrznej pętli. Na przykład:
public class Test {
public static void main(String[] args) {
outerloop:
for (int i=0; i < 5; i++) {
for (int j=0; j < 5; j++) {
if (i * j > 6) {
System.out.println("Breaking");
break outerloop;
}
System.out.println(i + " " + j);
}
}
System.out.println("Done");
}
}
To drukuje:
0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3
1 4
2 0
2 1
2 2
2 3
Breaking
Done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 17:11:39
Technicznie poprawną odpowiedzią jest etykietowanie zewnętrznej pętli. W praktyce, jeśli chcesz zakończyć w dowolnym punkcie wewnątrz pętli wewnętrznej, lepiej byłoby zewnętrznie kod do metody (statyczna metoda, jeśli jest taka potrzeba), a następnie ją wywołać.
To by się opłaciło za czytelność.Kod stałby się czymś takim:
private static String search(...)
{
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
// Do something and break...
return search;
}
}
}
return null;
}
Dopasowanie przykładu dla zaakceptowanej odpowiedzi:
public class Test {
public static void main(String[] args) {
loop();
System.out.println("Done");
}
public static void loop() {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i * j > 6) {
System.out.println("Breaking");
return;
}
System.out.println(i + " " + j);
}
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-03 10:31:41
Możesz użyć nazwanego bloku wokół pętli:
search: {
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
// Do something and break...
break search;
}
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 09:12:12
Nigdy nie używam etykiet. To chyba kiepska praktyka. Oto co bym zrobił:
boolean finished = false;
for (int i = 0; i < 5 && !finished; i++) {
for (int j = 0; j < 5; j++) {
if (i * j > 6) {
finished = true;
break;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-04 17:18:10
Możesz użyć etykiet:
label1:
for (int i = 0;;) {
for (int g = 0;;) {
break label1;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:30:26
Może z funkcją?
public void doSomething(List<Type> types, List<Type> types2){
for(Type t1 : types){
for (Type t : types2) {
if (some condition) {
//do something and return...
return;
}
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 12:25:57
Możesz użyć zmiennej tymczasowej:
boolean outerBreak = false;
for (Type type : types) {
if(outerBreak) break;
for (Type t : types2) {
if (some condition) {
// Do something and break...
outerBreak = true;
break; // Breaks out of the inner loop
}
}
}
W zależności od funkcji, możesz również wyjść / powrócić z pętli wewnętrznej:
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
// Do something and break...
return;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-20 09:11:59
Jeśli nie lubisz break
s I goto
s, możesz użyć "tradycyjnej" pętli for zamiast for-in, z dodatkowym warunkiem przerwania:
int a, b;
bool abort = false;
for (a = 0; a < 10 && !abort; a++) {
for (b = 0; b < 10 && !abort; b++) {
if (condition) {
doSomeThing();
abort = true;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-21 22:56:34
Musiałem zrobić podobną rzecz, ale zdecydowałem się nie używać do tego pętli enhanced for.
int s = type.size();
for (int i = 0; i < s; i++) {
for (int j = 0; j < t.size(); j++) {
if (condition) {
// do stuff after which you want
// to completely break out of both loops
s = 0; // enables the _main_ loop to terminate
break;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-10 08:54:50
Wolę dodać jawne "exit" do testów pętli. To sprawia, że jasne do każdy przypadkowy czytelnik, który pętla może zakończyć się wcześniej.
boolean earlyExit = false;
for(int i = 0 ; i < 10 && !earlyExit; i++) {
for(int j = 0 ; i < 10 && !earlyExit; j++) { earlyExit = true; }
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:33:33
Java 8 Stream
rozwiązanie:
List<Type> types1 = ...
List<Type> types2 = ...
types1.stream()
.flatMap(type1 -> types2.stream().map(type2 -> new Type[]{type1, type2}))
.filter(types -> /**some condition**/)
.findFirst()
.ifPresent(types -> /**do something**/);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 17:46:58
Możesz zerwać wszystkie pętle bez użycia label: i flags.
To trudne rozwiązanie.Tutaj condition1 jest warunkiem, który jest używany do przerwania pętli K i J. A condition2 jest warunkiem, który jest używany do przerwania pętli K, J i I.
Na przykład:
public class BreakTesting {
public static void main(String[] args) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
for (int k = 0; k < 9; k++) {
if (condition1) {
System.out.println("Breaking from Loop K and J");
k = 9;
j = 9;
}
if (condition2) {
System.out.println("Breaking from Loop K, J and I");
k = 9;
j = 9;
i = 9;
}
}
}
}
System.out.println("End of I , J , K");
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-25 22:44:38
Raczej przez długi czas myślałem, aby podzielić się tego typu odpowiedzi na tego typu pytania.
Zazwyczaj takie przypadki wchodzą w zakres bardziej znaczącej logiki, powiedzmy, że przeszukiwanie lub manipulowanie niektórymi iteracyjnymi obiektami "Dla", o których mowa, więc zwykle używam podejścia funkcjonalnego:
public Object searching(Object[] types) {//or manipulating
List<Object> typesReferences = new ArrayList<Object>();
List<Object> typesReferences2 = new ArrayList<Object>();
for (Object type : typesReferences) {
Object o = getByCriterion(typesReferences2, type);
if(o != null) return o;
}
return null;
}
private Object getByCriterion(List<Object> typesReferences2, Object criterion) {
for (Object typeReference : typesReferences2) {
if(typeReference.equals(criterion)) {
// here comes other complex or specific logic || typeReference.equals(new Object())
return typeReference;
}
}
return null;
}
Główne wady:
- mniej więcej dwa razy więcej linii
- większe zużycie cykli obliczeniowych, co oznacza, że jest wolniejszy od algorytmicznego punktu widzenia
- więcej typowanie pracy
Plusy:
- wyższy stosunek do rozdzielenia obaw ze względu na funkcjonalną ziarnistość [[8]}wyższy stosunek re-usability i kontroli wyszukiwanie / manipulowanie logiką bez
- metody nie są długie, dlatego są bardziej zwarte i łatwiejsze do zrozumienia
- subiektywnie wyższy współczynnik czytelności
Więc to jest po prostu obsługi sprawy poprzez inne podejście.
W zasadzie pytanie do autora tego pytanie: co sądzisz o tym podejściu?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 19:14:59
Jeśli jest wewnątrz jakiejś funkcji, dlaczego po prostu jej nie zwrócisz:
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
return value;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 11:25:58
Najlepsza i łatwa metoda..
outerloop:
for(int i=0; i<10; i++){
// here we can break Outer loop by
break outerloop;
innerloop:
for(int i=0; i<10; i++){
// here we can break innerloop by
break innerloop;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:31:33
Dość nietypowe podejście, ale pod względem długości kodu (a nie wydajności ) jest to najprostsza rzecz, jaką można zrobić:
for(int i = 0; i++; i < j) {
if(wanna exit) {
i = i + j; // if more nested, also add the
// maximum value for the other loops
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:32:09
Użyj Etykiet.
INNER:for(int j = 0; j < numbers.length; j++) {
System.out.println("Even number: " + i + ", break from INNER label");
break INNER;
}
Zobacz Ten artykuł
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:34:23
Inne rozwiązanie, wymienione bez przykładu (faktycznie działa w kodzie prod).
try {
for (Type type : types) {
for (Type t : types2) {
if (some condition #1) {
// Do something and break the loop.
throw new BreakLoopException();
}
}
}
}
catch (BreakLoopException e) {
// Do something on look breaking.
}
Oczywiście BreakLoopException
powinny być wewnętrzne, prywatne i przyspieszone z no-stack-trace:
private static class BreakLoopException extends Exception {
@Override
public StackTraceElement[] getStackTrace() {
return new StackTraceElement[0];
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 17:47:54
boolean broken = false; // declared outside of the loop for efficiency
for (Type type : types) {
for (Type t : types2) {
if (some condition) {
broken = true;
break;
}
}
if (broken) {
break;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-11 22:14:59
Chciałem odpowiedzieć to pytanie , ale zostało oznaczone jako DUPLIKAT, który uniemożliwia mi również publikowanie. Więc zamieść go tutaj !
Jeśli jest to nowa implementacja, możesz spróbować przepisać logikę jako polecenia if-else_if-else.
while(keep_going) {
if(keep_going && condition_one_holds) {
// code
}
if(keep_going && condition_two_holds) {
// code
}
if(keep_going && condition_three_holds) {
// code
}
if(keep_going && something_goes_really_bad) {
keep_going=false;
}
if(keep_going && condition_four_holds) {
// code
}
if(keep_going && condition_five_holds) {
// code
}
}
W przeciwnym razie możesz spróbować ustawić flagę, gdy ten specjalny warunek ma wystąpił i sprawdzić tę flagę w każdym z warunków pętli.
something_bad_has_happened = false;
while(something is true && !something_bad_has_happened){
// code, things happen
while(something else && !something_bad_has_happened){
// lots of code, things happens
if(something happened){
-> Then control should be returned ->
something_bad_has_happened=true;
continue;
}
}
if(something_bad_has_happened) { // things below will not be executed
continue;
}
// other things may happen here as well but will not be executed
// once control is returned from the inner cycle
}
HERE! So, while a simple break will not work, it can be made to work using continue.
Jeśli po prostu przenosisz logikę z jednego język programowania do Javy i po prostu chcesz, aby coś działało możesz spróbować użyć etykiet
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:50
Demo dla break
, continue
, label
.
Więc słowa kluczowe java break
i continue
mają wartość domyślną, jest to "najbliższa pętla", Toady kilka lat po użyciu Javy, właśnie go dostałem !
import org.junit.Test;
/**
* Created by cui on 17-5-4.
*/
public class BranchLabel {
@Test
public void test() {
System.out.println("testBreak");
testBreak();
System.out.println("testBreakLabel");
testBreakLabel();
System.out.println("testContinue");
testContinue();
System.out.println("testContinueLabel");
testContinueLabel();
}
/**
testBreak
a=0,b=0
a=0,b=1
a=1,b=0
a=1,b=1
a=2,b=0
a=2,b=1
a=3,b=0
a=3,b=1
a=4,b=0
a=4,b=1
*/
public void testBreak() {
for (int a = 0; a < 5; a++) {
for (int b = 0; b < 5; b++) {
if (b == 2) {
break;
}
System.out.println("a=" + a + ",b=" + b);
}
}
}
/**
testContinue
a=0,b=0
a=0,b=1
a=0,b=3
a=0,b=4
a=1,b=0
a=1,b=1
a=1,b=3
a=1,b=4
a=2,b=0
a=2,b=1
a=2,b=3
a=2,b=4
a=3,b=0
a=3,b=1
a=3,b=3
a=3,b=4
a=4,b=0
a=4,b=1
a=4,b=3
a=4,b=4
*/
public void testContinue() {
for (int a = 0; a < 5; a++) {
for (int b = 0; b < 5; b++) {
if (b == 2) {
continue;
}
System.out.println("a=" + a + ",b=" + b);
}
}
}
/**
testBreakLabel
a=0,b=0,c=0
a=0,b=0,c=1
* */
public void testBreakLabel() {
anyName:
for (int a = 0; a < 5; a++) {
for (int b = 0; b < 5; b++) {
for (int c = 0; c < 5; c++) {
if (c == 2) {
break anyName;
}
System.out.println("a=" + a + ",b=" + b + ",c=" + c);
}
}
}
}
/**
testContinueLabel
a=0,b=0,c=0
a=0,b=0,c=1
a=1,b=0,c=0
a=1,b=0,c=1
a=2,b=0,c=0
a=2,b=0,c=1
a=3,b=0,c=0
a=3,b=0,c=1
a=4,b=0,c=0
a=4,b=0,c=1
*/
public void testContinueLabel() {
anyName:
for (int a = 0; a < 5; a++) {
for (int b = 0; b < 5; b++) {
for (int c = 0; c < 5; c++) {
if (c == 2) {
continue anyName;
}
System.out.println("a=" + a + ",b=" + b + ",c=" + c);
}
}
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 10:43:31
for (int j = 0; j < 5; j++) //inner loop
należy zastąpić
for (int j = 0; j < 5 && !exitloops; j++)
.
Tutaj, w tym przypadku pełne zagnieżdżone pętle powinny być zakończone, jeśli warunek jest True
. Ale jeśli używamy exitloops
Tylko do górnego loop
for (int i = 0; i < 5 && !exitloops; i++) //upper loop
Wtedy wewnętrzna pętla będzie kontynuowana, ponieważ nie ma dodatkowej flagi, która powiadomi tę wewnętrzną pętlę o wyjściu.
Przykład: if
i = 3
andj=2
then condition isfalse
. Ale w następnej iteracji pętli wewnętrznejj=3
wtedy warunek(i*j)
staje się9
który jesttrue
ale pętla wewnętrzna będzie kontynuowane doj
stać się5
.
Musi więc używać exitloops
również do pętli wewnętrznych.
boolean exitloops = false;
for (int i = 0; i < 5 && !exitloops; i++) { //here should exitloops as a Conditional Statement to get out from the loops if exitloops become true.
for (int j = 0; j < 5 && !exitloops; j++) { //here should also use exitloops as a Conditional Statement.
if (i * j > 6) {
exitloops = true;
System.out.println("Inner loop still Continues For i * j is => "+i*j);
break;
}
System.out.println(i*j);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:28:31
Podobnie jak sugestia informacyjna @1800, użyj warunku, który łamie pętlę wewnętrzną jako warunku na pętli zewnętrznej:
boolean hasAccess = false;
for (int i = 0; i < x && hasAccess == false; i++){
for (int j = 0; j < y; j++){
if (condition == true){
hasAccess = true;
break;
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:33:07
Możesz wykonać następujące czynności:
Ustaw zmienną lokalną na
false
-
Ustaw zmienną
true
w pierwszej pętli, gdy chcesz przerwać -
Następnie możesz sprawdzić w pętli zewnętrznej, czy warunek jest ustawiony, a następnie zerwać z pętli zewnętrznej, jak również.
boolean isBreakNeeded = false; for (int i = 0; i < some.length; i++) { for (int j = 0; j < some.lengthasWell; j++) { //want to set variable if (){ isBreakNeeded = true; break; } if (isBreakNeeded) { break; //will make you break from the outer loop as well } }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:26:48
W niektórych przypadkach możemy efektywnie używać pętli while
.
Random rand = new Random();
// Just an example
for (int k = 0; k < 10; ++k) {
int count = 0;
while (!(rand.nextInt(200) == 100)) {
count++;
}
results[k] = count;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:28:15
Nawet tworzenie flagi dla pętli zewnętrznej i sprawdzanie, czy po każdym wykonaniu pętli wewnętrznej może być odpowiedzią.
Tak:
for (Type type : types) {
boolean flag=false;
for (Type t : types2) {
if (some condition) {
// Do something and break...
flag=true;
break; // Breaks out of the inner loop
}
}
if(flag)
break;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:31:18
boolean condition = false;
for (Type type : types) {
for (int i = 0; i < otherTypes.size && !condition; i ++) {
condition = true; // if your condition is satisfied
}
}
Użyj warunku jako znacznika po zakończeniu przetwarzania. Wtedy wewnętrzna pętla jest włączona tylko wtedy, gdy warunek nie został spełniony. Tak czy siak, zewnętrzna pętla będzie ciągnąć się dalej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 16:33:48
Java nie posiada funkcji goto jak w C++. Jednak goto
jest zarezerwowanym słowem kluczowym w Javie. Mogą to wdrożyć w przyszłości. Na twoje pytanie odpowiedź brzmi: w języku Java istnieje coś, co nazywa się label, do którego można zastosować instrukcje continue
i break
. Znajdź poniższy kod:
public static void main(String ...args) {
outerLoop: for(int i=0;i<10;i++) {
for(int j=10;j>0;j--) {
System.out.println(i+" "+j);
if(i==j) {
System.out.println("Condition Fulfilled");
break outerLoop;
}
}
}
System.out.println("Got out of the outer loop");
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-04 11:59:44
Używasz etykiety do łamania wewnętrznych pętli
public class Test {
public static void main(String[] args) {
outerloop:
for (int i=0; i < 5; i++) {
for (int j=0; j < 5; j++) {
if (i * j > 6) {
System.out.println("Breaking");
break outerloop;
}
System.out.println(i + " " + j);
}
}
System.out.println("Done");
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 08:39:43
Sprawdź, czy pętla wewnętrzna jest zakończona instrukcją if, sprawdzając zmienną pętli wewnętrznej. Możesz również utworzyć inną zmienną, taką jak wartość logiczna, aby sprawdzić, czy pętla wewnętrzna jest zakończona.
W tym przykładzie używa zmiennej pętli wewnętrznej, aby sprawdzić, czy została zakończona:
int i, j;
for(i = 0; i < 7; i++){
for(j = 0; j < 5; j++) {
if (some condition) {
// Do something and break...
break; // Breaks out of the inner loop
}
}
if(j < 5){ // Checks if inner loop wasn't finished
break; // Breaks out of the outer loop
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-07 18:57:20