Loops (for, while)
for loop तब use करते हैं जब पता हो कितनी बार repeat करना है। while loop तब जब condition के true रहने तक repeat करना हो।
do-while loop कम से कम एक बार ज़रूर चलता है, चाहे condition false ही क्यों ना हो।
for (int i = 1; i <= 5; i++) {
System.out.println("Lap " + i);
}- for: जब count पहले से पता हो
- while: जब तक condition true हो
- do-while: कम से कम 1 बार चलता है
for loop के तीन parts होते हैं, semicolon से separate: initialization (एक बार, loop शुरू होने से पहले चलता है), condition (हर iteration से पहले check होता है — false होते ही loop रुक जाता है), और update (हर iteration के *बाद* चलता है, अगली condition check से पहले)।
तुम multiple variables भी initialize/update कर सकते हो comma से separate करके — जैसे एक variable आगे बढ़े, दूसरा पीछे। तीनों parts optional हैं (for(;;) एक valid infinite loop है), लेकिन normally तीनों present होते हैं।
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println(i + " " + j);
}while loop condition को पहले check करता है — अगर शुरू में ही false हो, तो loop एक बार भी नहीं चलेगा। ये तब use होता है जब पता नहीं कितनी बार repeat करना है, सिर्फ़ एक condition true रहने तक चलना है।
do-while पहले body चलाता है, फिर condition check करता है — इसलिए ये guarantee देता है कि loop कम से कम एक बार ज़रूर चलेगा, चाहे condition शुरू में ही false हो। Menu-driven programs में do-while commonly use होता है (पहले menu दिखाओ, फिर check करो user ने exit choose किया या नहीं)।
int choice;
do {
choice = getMenuChoice(); // pehli baar zaroor chalega
} while (choice != 0);for-each loop (for (Type item : collection)) arrays और collections को traverse करने का सबसे simple और readable तरीक़ा है — index manage करने की ज़रूरत नहीं, "off-by-one" errors का risk ख़त्म।
Limitation: इससे तुम current index नहीं जान सकते (अगर ज़रूरत हो), और collection को traverse करते वक़्त modify (add/remove) नहीं कर सकते — ऐसा करने पर ConcurrentModificationException आएगी। और ये सिर्फ़ forward direction में ही चलता है, reverse या skip करना possible नहीं।
int[] scores = {90, 85, 77};
for (int s : scores) {
System.out.println(s);
}एक loop के अंदर दूसरा loop — बहुत common है patterns print करने, 2D arrays traverse करने, या हर pair of items compare करने के लिए। Outer loop rows control करता है, inner loop columns — outer एक बार चलता है तो inner *पूरा* चलता है।
Time complexity समझना ज़रूरी है: अगर outer loop N बार चलता है और inner भी N बार, total N×N = N² operations होते हैं — बड़े N के लिए ये slow हो सकता है।
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
// *
// * *
// * * *for(;;) या while(true) infinite loop बनाते हैं — normally ग़लती से बनती हैं (bug, जब तुम भूल जाते हो condition को update करना), लेकिन server programs, game loops (जो continuously चलते रहना चाहिए), या "poll until event" जैसी situations में जान-बूझकर use होती हैं, साथ में एक internal break condition के।
अगर accidental infinite loop बन जाए, program "hang" हो जाता है (कभी ख़त्म ही नहीं होता) — IDE में "stop" button दबाना पड़ता है। इसलिए हर loop लिखते वक़्त ख़ुद से पूछो: "condition कभी false होगी क्या?"