CodeGym /Java Blog /এলোমেলো /যখন বিবৃতি
John Squirrels
লেভেল 41
San Francisco

যখন বিবৃতি

এলোমেলো দলে প্রকাশিত
আমাদের প্রথম প্রোগ্রামগুলি নির্দেশাবলীর একটি ক্রম ছিল যা একের পর এক কার্যকর করা হয়। কাঁটাচামচ নেই। এর মধ্যে রয়েছে হ্যালোওয়ার্ল্ড, যা একটি শুভেচ্ছা প্রদর্শন করে। এটি পাটিগণিত গণনা অন্তর্ভুক্ত. আমাদের প্রথম প্রোগ্রামগুলির পরে, আমরা শিখেছি কীভাবে শাখা করতে হয়, অর্থাৎ কীভাবে একটি প্রোগ্রামকে নির্দিষ্ট শর্তের উপর নির্ভর করে বিভিন্ন ক্রিয়া সম্পাদন করতে হয়। একটি কেন্দ্রীয় গরম এবং এয়ার কন্ডিশনার সিস্টেম নিয়ন্ত্রণ করার জন্য এখানে কোড আছে:

if (tempRoom>tempComfort)
    airConditionerOn();
if (tempRoom<tempComfort)
    heaterOn();
পরবর্তী পদক্ষেপ গ্রহণ করা. দৈনন্দিন জীবনে, আমরা প্রায়শই অভিন্ন পুনরাবৃত্তিমূলক ক্রিয়া সম্পাদন করি, উদাহরণস্বরূপ, পাইয়ের জন্য আপেলের খোসা ছাড়ানো। এই চিত্তাকর্ষক প্রক্রিয়া হিসাবে বর্ণনা করা যেতে পারে:
  1. যদি বাটিতে আপেল থাকে তবে আমরা 1.1 থেকে 1.4 ধাপগুলি সম্পাদন করি:

    1. 1.1। একটি আপেল নিন
    2. 1.2। খোসা ছাড়িয়ে টুকরো টুকরো করে কেটে নিন
    3. 1.3। একটি প্যানে পাই ক্রাস্টে আপেলের টুকরো সাজান
    4. 1.4। ধাপ 1 এ ফিরে যান।
সময় বিবৃতি - 2ধরা যাক আপনার কাছে দশটি আপেল, দুটি হাত এবং একটি ছুরি আছে। বাস্তব জীবনে, আপনি প্রতিটি আপেলের জন্য একই অ্যালগরিদম অনুসরণ করে ক্রমান্বয়ে পুরো ডজনের খোসা ছাড়েন। কিন্তু কিভাবে আমরা একটি প্রোগ্রাম প্রতিটি আপেল জন্য একটি পুনরাবৃত্তিমূলক কর্ম করতে না?
  • আমরা নিজেদেরকে আপেলের সংখ্যার সাথে বেঁধে রাখি, কিন্তু যদি আমাদের কাছে সেগুলি পর্যাপ্ত না থাকে, তবে কিছু কমান্ড "পেলোড" ছাড়াই কার্যকর করা হবে (এবং অস্তিত্বহীন আপেলের খোসা ছাড়ানোর চেষ্টা করার সময় আমরা নিজেদেরকে কেটে ফেলতে পারি)।
  • যদি খোসা ছাড়ানোর আদেশের চেয়ে বেশি আপেল থাকে, তবে কিছু আপেল খোসা ছাড়াই থাকবে।
  • এই ধরনের কোড পড়া কঠিন। এটিতে প্রচুর পুনরাবৃত্তি রয়েছে এবং এটি সংশোধন করা কঠিন।

লুপগুলি এমন বিবৃতি যা ক্রিয়াগুলি বারবার সম্পাদন করার অনুমতি দেয়

Java এর while লুপ আমাদের ক্ষেত্রে ভালো কাজ করবে। এই গঠন একাধিক ক্রিয়াকে একটি সংক্ষিপ্ত এবং বোধগম্য কাঠামোতে রাখে। একটি সময় লুপ ব্যবহার করে, একটি পাইয়ের জন্য একটি আপেল-স্লাইসিং অ্যালগরিদম জাভাতে এইরকম দেখতে পারে:

while (numberOfApplesInBowl > 0) {
    apple = bowl.grabNextApple();
    arrangeInPie(apple.peel().slice());
    numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
}
System.out.println("The apples for the pie have been processed.");

কমান্ড সিনট্যাক্স

while স্টেটমেন্টের প্রথম রূপটি এরকম:

while (Boolean expression) {
	// Loop body — the statement(s) that are repeatedly executed
}
এই কোডটি কার্যকর করা হলে কী ঘটে তার একটি ধাপে ধাপে ব্যাখ্যা এখানে রয়েছে:
  1. আমরা while কীওয়ার্ডের পরে বন্ধনীতে পাওয়া বুলিয়ান এক্সপ্রেশনের মূল্যায়ন করি ।
  2. যদি বুলিয়ান এক্সপ্রেশনটি সত্যে মূল্যায়ন করে, তাহলে লুপ বডিতে বিবৃতিগুলি কার্যকর করা হয়। লুপ বডিতে শেষ বিবৃতিটি কার্যকর হওয়ার পরে, আমরা ধাপ 1 এ যাই
  3. যদি বুলিয়ান এক্সপ্রেশনের মূল্যায়ন মিথ্যা হয়, তাহলে আমরা while লুপের পর প্রথম স্টেটমেন্টে চলে যাই ।

একটি পূর্বশর্ত সঙ্গে লুপ

যেহেতু আমরা লুপ বডি কার্যকর করার আগে সবসময় বুলিয়ান এক্সপ্রেশন (লুপে প্রবেশের শর্ত) মূল্যায়ন করি , তাই while লুপের এই ফর্মটিকে প্রায়শই একটি পূর্ব শর্ত সহ একটি লুপ বলা হয় । একটি সংখ্যার প্রথম দশটি ঘাতের একটি টেবিল তৈরি করা যাক:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = 1; // The result of exponentiation
    int exponent = 1; // The initial exponent
    while (exponent <= 10) { // The condition for entering the loop
        result = result * base;
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
    }
}
কনসোল আউটপুট:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0

একটি পোস্টকন্ডিশন সঙ্গে লুপ

এখানে এই লুপের দ্বিতীয় রূপটি রয়েছে:

do {
    // Loop body — the statement(s) that are repeatedly executed
} while (Boolean expression);
এই কোডটি কার্যকর করা হলে কী ঘটে তার একটি ব্যাখ্যা এখানে রয়েছে:
  1. লুপ বডিটি কার্যকর করা হয় ( ডু কীওয়ার্ডের পরপরই )।
  2. আমরা while কীওয়ার্ডের পরে বন্ধনীতে পাওয়া বুলিয়ান এক্সপ্রেশনের মূল্যায়ন করি ।
  3. যদি বুলিয়ান এক্সপ্রেশনটি সত্যে মূল্যায়ন করে, তাহলে আমরা ধাপ 1 এ যাই
  4. যদি বুলিয়ান এক্সপ্রেশনের মূল্যায়ন মিথ্যা হয়, তাহলে আমরা while লুপের পর প্রথম স্টেটমেন্টে চলে যাই ।
পূর্ববর্তী লুপ থেকে দুটি প্রধান পার্থক্য হল: 1) লুপ বডি অন্তত একবার কার্যকর করা হয় এবং 2) লুপ বডি কার্যকর করার পরে বুলিয়ান এক্সপ্রেশন মূল্যায়ন করা হয়। তদনুসারে, এই ধরনের while লুপকে পোস্ট কন্ডিশন সহ লুপ বলা হয় । এইবার আমরা 10000 এর বেশি নয় এমন একটি সংখ্যার ক্ষমতার একটি টেবিল প্রদর্শন করব:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = base; // The result of exponentiation
    int exponent = 1; // The initial exponent
    do {
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
        result = result * base;
    } while (result < 10000); // The condition for exiting the loop
}
কনসোল আউটপুট:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
Process finished with exit code 0
কোডের পরিবর্তনগুলিতে মনোযোগ দিন। একটি পূর্বশর্ত সহ লুপের সাথে এটি তুলনা করুন।

লুপগুলির সাথে কাজ করার বিষয়ে আকর্ষণীয় তথ্য

লুপ বডির মধ্যে ব্রাঞ্চিং স্টেটমেন্ট

দুটি বিবৃতি রয়েছে যা একটি লুপের মধ্যে সম্পাদনকে প্রভাবিত করে: বিরতি (যা আমরা পরবর্তী অধ্যায়ে আরও বিশদে আলোচনা করব) এবং চালিয়ে যান
  • চালিয়ে যান — বর্তমান পুনরাবৃত্তিতে লুপ বডির বাকি অংশের এক্সিকিউশন এড়িয়ে যায় এবং while স্টেটমেন্টের বুলিয়ান এক্সপ্রেশনের মূল্যায়নে যায়। যদি অভিব্যক্তিটি সত্যে মূল্যায়ন করা হয়, তাহলে লুপ চলতে থাকে।
  • break — অবিলম্বে বর্তমান পুনরাবৃত্তির কার্য সম্পাদন বন্ধ করে এবং লুপের পরে প্রথম বিবৃতিতে নিয়ন্ত্রণ স্থানান্তর করে। এইভাবে, এই বিবৃতিটি বর্তমান লুপের কার্য সম্পাদন শেষ করে। আমরা পরবর্তী নিবন্ধে আরও বিশদে এটি বিবেচনা করব।
আমাদের ফলের উদাহরণ স্মরণ করুন। আমরা আপেলের গুণমান সম্পর্কে নিশ্চিত না হলে, আমরা একটি অবিরত বিবৃতি ব্যবহার করে কোড পরিবর্তন করতে পারি:

while (numberOfApplesInBowl > 0) {
    apple = bowl.grabNextApple();
    numberOfApplesInBow--; // "--" is the decrement operator, which reduces the number of apples by one
    if (apple.isBad()) { // This method returns true for rotten apples
        apple.throwInGarbage();
        continue; // Continue the loop. Jump to evaluation of numberOfApplesInBowl > 0
    }
    arrangeInPie(apple.peel().slice());
}
কন্টিনিউ স্টেটমেন্টটি প্রায়ই ব্যবহৃত হয় যখন লুপ বডিতে স্টেটমেন্টগুলি কার্যকর করা প্রয়োজন যদি একটি নির্দিষ্ট শর্ত সন্তুষ্ট হয় উদাহরণস্বরূপ, যখন একটি হার্ডওয়্যার সেন্সর ট্রিগার করা হয় তখন আমরা ক্রিয়া সম্পাদন করতে চাই (অন্যথায়, কেবল যে লুপটিতে আমরা সেন্সর রিডিং নিই) বা আমরা শুধুমাত্র একটি লুপের নির্দিষ্ট পুনরাবৃত্তিতে একটি অভিব্যক্তি গণনা করতে চাই। পরবর্তী ক্ষেত্রের একটি উদাহরণ দেখা যায় প্রাকৃতিক সংখ্যার ঘনক্ষেত্রের যোগফল গণনা করার জন্য একটি while লুপ ব্যবহার করে যার বর্গ সংখ্যার সংখ্যার চেয়ে কম। বিভ্রান্ত? নিম্নলিখিত কোড পরীক্ষা করে দেখুন:

public static void main(String[] args) {
    int sum = 0;  // Total amount
    int i = 0;  // Initial number in the series
    int count = 20;  // Number of numbers
    while (i <= count) {
        i++;  // Get the next number — "i++" is equivalent to "i = i + 1"
        if (i * i <= count)  // If the square of the number is less than
            continue;  // the number of numbers, then we won't calculate the sum
                            // Jump to the next number in the loop
        sum += i * i * i;  // Otherwise, we calculate the sum of the cubes of numbers
    }  // "sum += i * i * i" is notation that is equivalent to "sum = sum + i * i * i"
    System.out.println(sum);  // Print the result
}

অগণিত চক্র

এই শাখা বিবৃতিগুলি প্রায়শই অসীম লুপে ব্যবহৃত হয়। আমরা একটি লুপকে অসীম বলি যদি লুপ থেকে প্রস্থান করার জন্য বুলিয়ান শর্ত কখনও সন্তুষ্ট না হয়। কোডে, এটি এরকম কিছু দেখায়:

while (true) {
    // Loop body 
}
এই ক্ষেত্রে, একটি বিরতি বিবৃতি আমাদের লুপ থেকে প্রস্থান করতে সাহায্য করে। লুপের শরীরের বাইরে নির্ধারিত বাহ্যিক অবস্থার জন্য অপেক্ষা করার সময় এই ধরনের লুপ উপযুক্ত। উদাহরণস্বরূপ, অপারেটিং সিস্টেম বা গেমগুলিতে (লুপ থেকে প্রস্থান করা মানে গেম থেকে প্রস্থান করা)। অথবা যখন অ্যালগরিদমগুলি ব্যবহার করে, যা চেষ্টা করে, লুপের প্রতিটি পুনরাবৃত্তির সাথে, কিছু ফলাফল উন্নত করার জন্য, তবে অতিবাহিত সময় বা একটি বাহ্যিক ঘটনার (যেমন চেকার, দাবা, বা আবহাওয়ার পূর্বাভাস) এর উপর ভিত্তি করে পুনরাবৃত্তির সংখ্যা সীমিত করে। মনে রাখবেন যে স্বাভাবিক অবস্থায় অসীম লুপগুলি কাম্য নয়। প্রদর্শনের জন্য, আসুন ব্যাখ্যায় ফিরে আসি:

public static void main(String[] args) {
    int base = 3; // The number that will be exponentiated
    int result = 1; // The result of exponentiation
    int exponent = 1; // The initial exponent
    while (true) {
        result = result * base;
        System.out.println(base + " raised to the power of " + exponent + " = " + result);
        exponent++;
        if (exponent > 10)
            break; // Exit the loop
    }
}
কনসোল আউটপুট:

3 raised to the power of 1 = 3
3 raised to the power of 2 = 9
3 raised to the power of 3 = 27
3 raised to the power of 4 = 81
3 raised to the power of 5 = 243
3 raised to the power of 6 = 729
3 raised to the power of 7 = 2187
3 raised to the power of 8 = 6561
3 raised to the power of 9 = 19683
3 raised to the power of 10 = 59049
Process finished with exit code 0

নেস্টেড লুপ

এবং এখন আমরা লুপ নিয়ে আমাদের চূড়ান্ত বিষয়ে আসি। সেই আপেল পাই (আমি আশা করি আপনি এই মুহুর্তে ক্ষুধার্ত নন) এবং আমাদের আপেল-খোসা লুপটি স্মরণ করুন:
  1. যদি বাটিতে আপেল থাকে তবে আমরা 1.1 থেকে 1.4 ধাপগুলি সম্পাদন করি:

    1. 1.1। একটি আপেল নিন
    2. 1.2। খোসা ছাড়িয়ে টুকরো টুকরো করে কেটে নিন
    3. 1.3। একটি প্যানে পাই ক্রাস্টে আপেলের টুকরো সাজান
    4. 1.4। ধাপ 1 এ ফিরে যান।
আসুন আরও বিশদে স্লাইসিং প্রক্রিয়া বর্ণনা করি:
  1. স্লাইসের সংখ্যা = 0
  2. যতক্ষণ না স্লাইসের সংখ্যা < 12, তারপর 2.1 থেকে 2.3 ধাপগুলি সম্পাদন করুন

    1. 2.1। আপেল থেকে আরেকটি টুকরো কেটে নিন
    2. 2.2। স্লাইসের সংখ্যা++
    3. 2.3। ধাপ 2 এ ফিরে যান
এবং আমরা এটিকে আমাদের পাই তৈরির অ্যালগরিদমে যুক্ত করব:
  1. যদি বাটিতে আপেল থাকে তবে আমরা 1.1 থেকে 1.6 ধাপগুলি সম্পাদন করি:

    1. 1.1। একটি আপেল নিন
    2. 1.2। খোসা ছাড়িয়ে নিন
    3. 1.3। স্লাইসের সংখ্যা = 0
    4. 1.4। যতক্ষণ না স্লাইসের সংখ্যা < 12, তারপরে 1.4.1 থেকে 1.4.3 ধাপগুলি সম্পাদন করুন
      1. 1.4.1। আপেল থেকে আরেকটি টুকরো কেটে নিন
      2. 1.4.2। স্লাইসের সংখ্যা++
      3. 1.4.3। ধাপ 1.4 এ ফিরে যান
    5. 1.5। একটি প্যানে পাই ক্রাস্টে আপেলের টুকরো সাজান
    6. 1.6। ধাপ 1 এ ফিরে যান।
এখন আমরা একটি লুপের মধ্যে একটি লুপ আছে. এই ধরনের গঠন খুব সাধারণ. একটি চূড়ান্ত উদাহরণ হিসাবে, আসুন আমরা প্রাথমিক বিদ্যালয়ে প্রেম করতে শিখেছি এমন একটি গুণের সারণী তৈরি করি।

 public static void main(String[] args) {
    // Print the second factors in a row
    System.out.println("    2  3  4  5  6  7  8  9"); 
    int i = 2;  // Assign the first factor to the variable
    while (i < 10) {  // First loop: execute as long as the first factor is less than 10
        System.out.print(i + " | ");  // Print the first factor at the beginning of the line
        int j = 2;  // The starting value of the second factor
        while (j < 10) { // Second loop: execute as long as the second factor is less than 10
            int product = i * j;  // Calculate the product of the factors
            if (product < 10)  // If the product is a single digit, then we print two spaces after the product
                System.out.print(product + "  ");
            else  // Otherwise, print the product and one space after it
                System.out.print(product + " ");
            j++;  // Increment the second factor by one
        }  // Go to the beginning of the second loop, i.e. "while (j < 10)"
        System.out.println();  // Move to the next line on the console
        i++;  // Increment the first factor by one
    } // Go to the beginning of the first loop, i.e. "while (i < 10)"
}
কনসোল আউটপুট:

    2  3  4  5  6  7  8  9
2 | 4 6 8 10 12 14 16 18
3 | 6 9 12 15 18 21 24 27
4 | 8 12 16 20 24 28 32 36
5 | 10 15 20 25 30 35 40 45
6 | 12 18 24 30 36 42 48 54
7 | 14 21 28 35 42 49 56 63
8 | 16 24 32 40 48 56 64 72
9 | 18 27 36 45 54 63 72 81
Process finished with exit code 0
লুপ (বিশেষ করে, যখন স্টেটমেন্ট) সফটওয়্যারের মৌলিক বিল্ডিং ব্লকগুলির মধ্যে একটি। CodeGym-এ কাজগুলি সমাধান করার মাধ্যমে, আপনি বিভিন্ন ধরণের লুপগুলি শিখবেন, তাদের জটিলতাগুলি বুঝতে পারবেন এবং সেগুলি ব্যবহার করার ক্ষেত্রে ব্যবহারিক দক্ষতা অর্জন করতে পারবেন৷
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION