وہ کہتے ہیں کہ بہترین پروگرامر ایک سست پروگرامر ہے۔ ایک ہی قسم کے اعمال کو کئی بار کرنے کے بجائے، وہ ایک الگورتھم لے کر آئے گا جو اس کے لیے کام کرے گا۔ اور وہ اسے اچھی طرح کرے گا تاکہ اسے دوبارہ کرنے کی ضرورت نہ رہے۔ ایک ہی کوڈ کو بار بار لکھنے سے بچنے کے لیے، لوپس ایجاد کیے گئے۔ آئیے تصور کریں کہ ہمیں کنسول میں 0 سے 99 تک نمبرز ڈسپلے کرنے کی ضرورت ہے۔ بغیر لوپ کے کوڈ:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
اس کوڈ میں 100 لائنیں لگیں گی! اتنے سارے. اور یہ ایک لوپ کے ساتھ کیسا نظر آئے گا:
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
صرف 3 لائنیں!
لوپس کے لیے کیا ہیں؟
A for loop پروگرام کوڈ کا ایک کنٹرول ڈھانچہ ہے جو الگورتھم کے عمل کی لکیری کو توڑتا ہے اور آپ کو متعدد بار مخصوص کوڈ پر عمل کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، آپ کو دوا کے 30 قطرے لینے کی ضرورت ہے۔ الگورتھم کچھ اس طرح ہوگا:- ایک گلاس تیار کریں۔
- ڈھکن کھولیں۔
- 1 ڈراپ حاصل کریں۔
- 2 قطرے حاصل کریں۔ ...
- 30 ڈراپ حاصل کریں۔
- دوا بند کرو۔
- وصول شدہ حصہ لیں۔
- ایک گلاس تیار کریں۔
- ڈرپ کیپ کھولیں۔
- 30 قطرے حاصل کریں۔
- دوا بند کرو۔
- وصول شدہ حصہ لیں۔
فار لوپ کیسے کام کرتا ہے۔
A for loop اس طرح استعمال ہوتا ہے:for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
نتیجہ:
0
1
2
3
4
اگر ہم اس اندراج کو انسانی زبان میں ترجمہ کرتے ہیں تو ہمیں درج ذیل ملتا ہے: " ایک متغیر i بنائیں جس کی ابتدائی قیمت 0 ہو، جب تک کہ یہ 5 تک نہ پہنچ جائے، اس میں 1 کا اضافہ کریں اور ہر قدم پر i کی قدر کنسول میں لکھیں۔ " جاوا میں لوپ کے لیے تین مراحل پر مبنی ہے، جسے درج ذیل خاکہ سے ظاہر کیا جا سکتا ہے: لوپ سے باہر نکلنے کی شرط ایک بولین اظہار ہے۔ اگر یہ غلط ہے تو، لوپ ختم ہو جائے گا. اوپر دی گئی مثال میں، متغیر کو i
1 سے بڑھایا گیا ہے۔ اگر اس کی قدر 5 سے کم ہے، تو لوپ جاری رہتا ہے۔ لیکن جیسے ہی i
یہ 5 سے بڑا یا اس کے برابر ہو جائے گا، سائیکل رک جائے گا۔ کاؤنٹر آپریٹر ایک اظہار ہے جو کاؤنٹر متغیر پر تبدیلی کرتا ہے۔ اوپر دی گئی مثال میں، متغیر i
میں 1 کا اضافہ کیا گیا تھا۔ یعنی، لوپ کو بالکل 5 بار عمل میں لایا جائے گا۔ اگر کاؤنٹر آپریٹر متغیر میں 2 کا اضافہ کرتا ہے i
تو نتیجہ مختلف ہوگا:
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
نتیجہ:
0
2
4
آپ ایک متغیر کو بھی ضرب کر سکتے ہیں، تقسیم کر سکتے ہیں، طاقت میں اضافہ کر سکتے ہیں، عام طور پر، جو چاہیں کر سکتے ہیں۔ اہم بات یہ ہے کہ تبدیلی کا نتیجہ تعداد میں ہوتا ہے۔ لوپ کا باڈی کوئی بھی کوڈ ہے جس پر عمل کیا جا سکتا ہے۔ اوپر دی گئی مثال میں، لوپ کا باڈی کنسول میں متغیر i کی قدر کو آؤٹ پٹ کر رہا تھا، لیکن اس باڈی کے مواد کام اور تخیل سے محدود ہیں۔ پوری اسکیم کا خلاصہ کرتے ہوئے، لوپ کے لیے اس کا اصول کچھ یوں ہے: لوپ کے باڈی میں موجود کوڈ کو جتنی بار کاؤنٹر آپریٹر لوپ سے باہر نکلنے کی شرط پوری کرنے سے پہلے تبادلوں کی تعداد کرے گا اس پر عمل درآمد کیا جائے گا۔ . اگر آپ لوپ سے باہر نکلنے کی حالت اس طرح سیٹ کرتے ہیں true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
پھر لوپ کے بعد کے کوڈ کو ایک ایرر کے ساتھ نشان زد کیا جائے گا unreachable statement
، کیونکہ یہ کبھی بھی عمل میں نہیں آئے گا۔ آسانی کے لیے ایک چیلنج: ذیل کے کوڈ کو چلانے کے نتیجے میں، کیا " Loop ended
" کنسول میں آؤٹ پٹ ہو گا یا لوپ لامتناہی طور پر چلے گا؟
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
جواب: ہو گا۔ متغیر i جلد یا بدیر اپنی زیادہ سے زیادہ قدر تک پہنچ جائے گا، اور مزید اضافہ اسے زیادہ سے زیادہ منفی قدر میں بدل دے گا، جس کے نتیجے میں باہر نکلنے کی شرط پوری ہو جائے گی (i <= -1)۔
ہر ایک لوپ کے لئے
لوپس کے ساتھ کام کرتے وقت، آپ کو بعض اوقات صفوں یا مجموعوں پر اعادہ کرنا پڑتا ہے۔ عام طور پر آپ لوپ کا استعمال کرتے ہوئے ایک صف کے ذریعے اعادہ کر سکتے ہیں:public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
اور یہ صحیح ہے۔ تاہم، صف کے تمام عناصر کو ایک ایک کرکے دہرانے کے لیے، وہ forEach تعمیر کے ساتھ آئے۔ اس کے دستخط درج ذیل ہیں:
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
آپ تاروں کی ایک صف کے ذریعے اعادہ کر سکتے ہیں اور ہر ایک کو مندرجہ ذیل طریقے سے کنسول پر پرنٹ کر سکتے ہیں۔
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
مختصر اور جامع بھی۔ سب سے اہم بات یہ ہے کہ کاؤنٹر اور باہر نکلنے کی حالت کے بارے میں سوچنے کی ضرورت نہیں ہے، ہمارے لیے سب کچھ پہلے ہی ہوچکا ہے۔
لوپس کو کس طرح استعمال کیا جاتا ہے۔
اب آئیے مختلف مسائل کو حل کرنے کے لیے جاوا میں for loop استعمال کرنے کی چند مثالیں دیکھتے ہیں۔ریورس سائیکل (بڑے سے چھوٹے تک)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
نتیجہ:
5
4
3
2
1
متعدد متغیرات اور لوپ باڈی میں کاؤنٹر کو بڑھانا
آپ ایک فار لوپ میں متعدد متغیرات استعمال کر سکتے ہیں، مثال کے طور پر انہیں کاؤنٹر سٹیٹمنٹ میں تبدیل کیا جا سکتا ہے۔int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
نتیجہ:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
یا دو متغیرات اور لوپ کا اعلان کریں جب تک کہ وہ ایک دوسرے کے برابر نہ ہوں۔
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
نتیجہ:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
یہ ممکن نہیں ہے کہ اس عمل کی کوئی قدر ہو، لیکن اس امکان کے بارے میں جاننا مفید ہے۔ آپ ایک فار لوپ میں اندرونی لوپ بھی بنا سکتے ہیں۔ اس صورت میں، لوپ کے مراحل کی تعداد کو ضرب دیا جائے گا:
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
نتیجہ:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
کاؤنٹر لوپ میں، j
بیرونی لوپ کے کاؤنٹر تک رسائی ممکن ہے۔ یہ نیسٹڈ لوپس کو دو جہتی، تین جہتی، اور دیگر صفوں کو عبور کرنے کا ایک مثالی طریقہ بناتا ہے:
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
نتیجہ:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
سائیکل کی جلد تکمیل
اگر آپ کو لوپ پر کارروائی کرتے وقت کسی لوپ میں خلل ڈالنے کی ضرورت ہو تو آپریٹر کا استعمال کریںbreak
، جو لوپ کی موجودہ باڈی کو روکتا ہے۔ اس کے بعد کی تمام تکرار کو بھی چھوڑ دیا گیا ہے:
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
طریقہ صف میں پہلے تلاش شدہ عنصر کی پوزیشن پرنٹ کرے گا:
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
نتیجہ:
1
لامتناہی سائیکل
لوپ کے لیے لامحدود بنانے کا دوسرا طریقہ یہ ہے کہ کاؤنٹر ڈیکلریشن ایریا، ایگزٹ کنڈیشن، اور کاؤنٹر اسٹیٹمنٹ کو خالی چھوڑ دیا جائے:for (;;) {
}
لیکن ذہن میں رکھیں کہ زیادہ تر معاملات میں ایک لامحدود لوپ ایک منطقی غلطی کا ثبوت ہے۔ اس طرح کے لوپ میں باہر نکلنے کی شرط ہونی چاہیے۔
GO TO FULL VERSION