কম্পিউটার টিউটোরিয়াল

জাভা অ্যারে: শুরুর জন্য সম্পূর্ণ গাইড

ক्या हुआ যদি একটি ভেরিয়েবল ডিক্লেয়ার করলে সেটি একাধিক মান সংরক্ষণ করতে পারত? সম্ভব? আপনি কি জানেন জাভা-তে অ্যারে (array) নামে একটি কনসেপ্ট রয়েছে যা আপনাকে ঠিক এই কাজটি করতে দেয়। আপনি একটি ভেরিয়েবলে একাধিক মান সংরক্ষণ করতে পারেন, যা আপনার কোডকে ক্লিন এবং টিডি রাখে।

এই গাইডে আমরা অ্যারে কীভাবে কাজ করে, কেন এটি ব্যবহৃত হয়, এবং আপনি অ্যারের কন্টেন্ট কীভাবে ম্যানিপুলেট করতে পারেন তা আলোচনা করব। কিছু উদাহরণ দিয়ে দেখাব কীভাবে সেগুলো কাজ করে।

অ্যারে কী?

একটি অ্যারে, যাকে লিস্টও বলা হয়, হলো একটি ডেটা স্ট্রাকচার যেটি এলিমেন্টের একটি অর্ডারড সিকোয়েন্স ধারণ করে। আপনি একটি অ্যারেতে শূন্য বা অধিক আইটেম সংরক্ষণ করতে পারেন, কিন্তু সেগুলো সব একই টাইপের হতে হবে। উদাহরণস্বরূপ, একটি অ্যারে একশ স্ট্রিং বা বান্নাবিশ্বা সংখ্যা সংরক্ষণ করতে পারে।

অ্যারে উপযোগী কারণ এটি একই ধরণের মানগুলো একসাথে গ্রুপ করতে সাহায্য করে। ধরুন আপনি কফির টাইপের একটি অ্যারে ডিফাইন করছেন। প্রতিটি কফি টাইপকে আলাদা ভেরিয়েবল হিসেবে ডিক্লেয়ার না করে, আপনি সেগুলো একটি অ্যারেতে গ্রুপ করে রাখতে পারেন।

একবার আপনি একটি অ্যারে ডিক্লেয়ার করলে, আপনি ইটারেট করে অ্যারেতে প্রতিটি মানের ওপর একই মেথড এবং অপারেশন চালাতে পারেন।

অ্যারে চিন্তা করার একটি পদ্ধতি হলো মানগুলোর একটি কালেকশন হিসেবে। আপনার আজকের টু-ডু লিস্ট تذكر করুন যা আপনাকে শেষ করতে হবে? সেটি অ্যারের মতো। 거기 কাজের একটি তালিকা রয়েছে যা আপনাকে করতে হবে, এবং প্রতিটি একটি নির্দিষ্ট অর্ডারে সংরক্ষিত।

অ্যারে ঘোষণা করা

জাভা-তে অ্যারে ঘোষণা করা সহজ। আপনার অ্যারের জন্য একটি নাম বেছে নিন এবং এর ডেটা টাইপ নির্দিষ্ট করুন। coffees নামে একটি অ্যারে ঘোষণার উদাহরণ:

String[] coffees;

আমাদের কোড coffees নামে একটি অ্যারে তৈরি করে। বাম পাশে আপনার অ্যারেতে সংরক্ষণ হবে সেই ডেটার টাইপ। আপনার একটি খালি ব্র্যাকেট পেয়ারও আছে। এটি আপনার কোডকে বলে আপনি একটি অ্যারে ডিফাইন করতে চান, শুধু একটি স্ট্রিং ভেরিয়েবল নয়। ডান পাশে আপনার ভেরিয়েবলের নাম।

আমরা এখনো শেষ করিনি। আপনি যখন একটি অ্যারে ঘোষণা করবেন, আপনাকে আপনার প্রোগ্রামকে বলতে হবে আপনি আপনার অ্যারেতে কতগুলো আইটেম রাখতে চান। এটি জাভাকে আপনার অ্যারেতে মান সংরক্ষণের জন্য প্রয়োজনীয় মেমরি এলোকেট করতে দেয়।

আমরা আমাদের coffees অ্যারেতে আমাদের প্রিয় তিনটি ব্লেন্ড রাখতে চাই। এর জন্য আমরা প্রোগ্রামকে বলব আমাদের অ্যারে তিনটি এলিমেন্ট ধারণ করতে পারবে:

coffees = new String[3];

এটি আমাদের অ্যারেতে তিনটি খালি মান তৈরি করবে যেগুলো পরে ভরা যাবে।

নিশ্চিত করুন যে আপনি চিন্তা করেছেন আপনি আপনার অ্যারেতে কতগুলো মান রাখতে চান। মনে রাখবেন, একবার আপনি একটি অ্যারে ভেরিয়েবলের সাইজ ডিফাইন করলে, সেটি পরিবর্তন করা যাবে না।

আমরা আমাদের কোডকে এক লাইনে কমপ্রেস করতে পারি যেখানে আমরা একসাথে অ্যারে ঘোষণা করব এবং মেমরি এলোকেট করব:

String[] coffees = new String[4];

এটি অ্যারে ঘোষণার সেরা পদ্ধতি কারণ এটি সংক্ষিপ্ত এবং সহজ। একমাত্র ওকেশন যেখানে এই পদ্ধতি কাজ করে না হলো যখন আপনি নিশ্চিত নন আপনি আপনার অ্যারেতে কতগুলো মান সংরক্ষণ করবেন। সেক্ষেত্রে, আপনি সম্ভবত প্রথমে অ্যারে ঘোষণা করবেন, তারপর আপনার প্রোগ্রাম জানালে কতগুলো মান রাখবে সেটি জানার পর মেমরি এলোকেট করবেন।

এই কেসে, আমাদের অ্যারে স্ট্রিং মান ধারণ করবে। তবে, আপনি ইন্টিজার অ্যারে, অবজেক্ট অ্যারে, অ্যারে অফ অ্যারে, বা অন্য যেকোনো ডেটা টাইপ ধারণকারী অ্যারে ঘোষণা করতে পারেন।

অ্যারে ইনিশিয়ালাইজেশন

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

String[] coffees = { "Rwanda Izuba", "French Roast", "Vietnam Da La Arabica" };

এই উদাহরণে, আমরা আমাদের অ্যারেতে তিনটি মান অ্যাসাইন করেছি।

অ্যারেতে এলিমেন্ট অ্যাক্সেস করা

অ্যারের সুন্দরতা হলো এগুলো অ্যাক্সেস করা সহজ। রূপকগতভাবে, এটি ঠিক আপনার টু-ডু লিস্টে একটি আইটেম সার্কেল করার মতো যেটি আপনি ফোকাস করতে চান।

একটি অ্যারেতে, প্রতিটি আইটেমকে তার নিজস্ব একটি স্পেশাল নম্বর দেওয়া হয়। এগুলোকে ইনডেক্স নম্বর বলা হয়। ইনডেক্স নম্বর ০ থেকে শুরু হয় এবং আপনার অ্যারেতে প্রতিটি আইটেমের জন্য ১ করে বাড়ে। নিচের লিস্টটি বিবেচনা করুন:

  • 0: Rwanda Izuba
  • 1: French Roast
  • 2: Vietnam Da Lat Arabica

এই লিস্টে, Rwanda Izuba ব্লেন্ডটির ইনডেক্স ভ্যালু ০, French Roast ব্লেন্ডটির ইনডেক্স ভ্যালু ১, এবং Vietnam Da Lat Arabica ব্লেন্ডটির ইনডেক্স ভ্যালু ২। নিচের অ্যারেটি নিন:

String[] coffees = { "Rwanda Izuba", "French Roast", "Vietnam Da La Arabica" };

আপনি যদি এই অ্যারেতে প্রথম আইটেমটি অ্যাক্সেস করতে চান, তবে এই কোড ব্যবহার করতে পারেন:

System.out.println(coffees[0]);

আমাদের কোড ফেরত দেবে: Rwanda Izuba।

ইনডেক্স ভ্যালু আপনার অ্যারেতে স্কয়ার ব্র্যাকেটের মাঝপথে পাস করা হয়। ইনডেক্স ভ্যালু হিসেবে থাকা নম্বর들의 রেঞ্জ ০ এবং আপনার অ্যারের দৈর্ঘ্যের চেয়ে এক কম পর্যন্ত। এর কারণ হলো, যেমন আমরা আগে বলেছি, অ্যারে ০ ভ্যালু থেকে ইনডেক্স করা হয়।

যদি আপনি একটি ইনডেক্স ভ্যালু অ্যাক্সেস করার চেষ্টা করেন যা অস্তিত্বে নেই, একটি এরর ফেরত আসবে:

ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

এই কেসে, আমরা আমাদের অ্যারেতে ইনডেক্স ভ্যালু ৩ অ্যাক্সেস করার চেষ্টা করেছি। কারণ আমাদের ইনডেক্স ভ্যালু শুধু ২ পর্যন্ত যায়—মনে রাখবেন, অ্যারে ০ থেকে ইনডেক্স করা হয়—একটি এরর ফেরত এল।

এটিকে একধাপ আরো বড় করি। ধরুন আপনি আপনার অ্যারেতে প্রতিটি আইটেমের মধ্য দিয়ে যেতে চান এবং সেগুলোতে আলাদা আলাদা অপারেশন করতে চান। আমরা আমাদের অ্যারেতে প্রতিটি আইটেম কনসোলে প্রিন্ট করব। আপনি একটি for-each লুপ ব্যবহার করে এটি সম্পন্ন করতে পারেন, এইভাবে:

class CoffeeArray {
    public static void main(String[] args) {
        String[] coffees = { "Rwanda Izuba", "French Roast", "Vietnam Da La Arabica" };
        for (String coffee : coffees) {
            System.out.println(coffee);
        }
    }
}

আমাদের কোড ফেরত দেবে:

Rwanda Izuba
French Roast
Vietnam Da La Arabica

এই উদাহরণে, আমাদের কোড আমাদের coffees অ্যারেতে প্রতিটি আইটেমের মধ্য দিয়ে ইটারেট করে এবং প্রতিটি আইটেম কনসোলে প্রিন্ট করে। আমরা একটি "for" লুপের বদলে for-each লুপ ব্যবহার করেছি কারণ এটিতে কাউন্টার লাগে না, যার মানে এটি আরও সংক্ষিপ্ত এবং পড়া সহজ।

অ্যারেতে আইটেম পরিবর্তন করা

হাস্টন, আমাদের একটি সমস্যা রয়েছে। সেটি বের হয়েছে আমাদের প্রিয় ফরাস ব্লেন্ড আসলে French Roast নামে নয়। এটিকে French Classic বলা হয়। আমরা যদি এটি পরিবর্তন করতে চাই, তবে ইনডেক্সিং ব্যবহার করতে পারি।

নিচের কোড বিবেচনা করুন:

class CoffeeArray {
    public static void main(String[] args) {
        String[] coffees = { "Rwanda Izuba", "French Roast", "Vietnam Da La Arabica" };
        coffees[1] = "French Classic";
        System.out.println(coffees[1]);
    }
}

আমরা অ্যাসাইনমেন্ট অপারেটর (=) ব্যবহার করেছি ইনডেক্স পজিশন ১-এ থাকা আমাদের কফির মান পরিবর্তন করতে। আমরা এর মান French Roast থেকে French Classic এ পরিবর্তন করেছি। আমাদের কোড ফেরত দেবে: French Classic।

জাভা অ্যারে: একটি উদাহরণ

আমরা আলোচনা করা সব কনসেপ্ট একসাথে একটি উদাহরণে দেখি। ধরুন আমরা গত সপ্তাহে কফিতে কত খরচ করেছি সেটি ক্যালকুলেট করতে চাই।

প্রথমে, আমাদের প্রোগ্রামের জন্য ক্লাস এবং ভেরিয়েবল সেটআপ করি:

class CoffeePrices {
    public static void main(String[] args) {
        Double[] purchases = {2.55, 2.75, 2.99, 3.05};
        double sum = 0;
    }
}

আমরা দুটি ভেরিয়েবল ঘোষণা করেছি। একটি ভেরিয়েবল আমাদের কেনার তালিকা সংরক্ষণ করে। অন্যটি কফিতে কত খরচ করেছি সেটির একটি কাউন্টার সংরক্ষণ করে। আমাদের পরবর্তী ধাপ হলো একটি for-each লুপ তৈরি করা যা প্রতিটি কফি কেনার মধ্য দিয়ে লুপ করবে এবং এটিকে আমাদের "sum" ভেরিয়েবলে যোগ করবে:

for (double purchase : purchases) {
    sum += purchase;
}

আমাদের কোড চালালে, আমাদের প্রোগ্রাম গত সপ্তাহে কফিতে মোট কত খরচ করেছি সেটি ক্যালকুলেট করবে। একমাত্র সমস্যা: আমাদের প্রোগ্রাম আমাদের কে বলছে না সেটি কত! আমরা কনসোলে প্রিন্ট করে মানটি পেতে পারি:

এই সব কোড একসাথে চালালে নিচের আউটপুট আসবে:

You've spent $11.34 on coffee in the last week.
$11.34 on coffee. Not bad! What a useful program.

উপসংহার (এবং চ্যালেঞ্জ)

অ্যারে একটি ডেটা টাইপ যা একই ডেটা টাইপের একাধিক মান সংরক্ষণ করতে পারে। আপনি যেকোনো কিছুর জন্য অ্যারে ডিক্লেয়ার করতে পারেন, যেমন আপনার প্রিয় বইয়ের তালিকা, একটি গেমের প্লেয়ারদের তালিকা, বা সংখ্যার একটি তালিকা যাদের গড় বের করতে চান।

চ্যালেঞ্জ খুঁজছেন? নিচে পড়ুন।

একটি প্রোগ্রাম লিখুন যা ইউজারকে একটি ট্রাভেল ডেস্টিনেশন সিলেক্ট করতে বলে সেটি সম্পর্কে আরো জানতে। আপনার ট্রাভেল ডেস্টিনেশনগুলো একটি অ্যারেতে রাখুন। প্রতিটি ডেস্টিনেশনের এক বাক্যের বিবরণ একটি আলাদা অ্যারেতে রাখুন।

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

এখন আপনি জাভা-তে অ্যারে প্রফেশনালের মতো ব্যবহার করতে পারবেন!

  1. অ্যারে রোটেশনের জন্য জাভা প্রোগ্রাম

  2. সর্বোচ্চ বর্ধমান সাবসিকোয়েন্স (LIS) এর জন্য জাভা প্রোগ্রাম

  3. কম সোর্টের জন্য জাভা প্রোগ্রাম

  4. জাভাতে ডিফল্ট অ্যারে মান