CodeGym /Java Blog /এলোমেলো /অ্যারে সম্পর্কে কিছু
John Squirrels
লেভেল 41
San Francisco

অ্যারে সম্পর্কে কিছু

এলোমেলো দলে প্রকাশিত
ওহে! পূর্বে আপনার প্রশিক্ষণে, আমরা একক বস্তু (এবং আদিম প্রকার) নিয়ে কাজ করেছি। কিন্তু যদি আমাদের শুধুমাত্র একটির পরিবর্তে একটি সম্পূর্ণ গোষ্ঠীর সাথে কাজ করতে হয়? উদাহরণস্বরূপ, বলুন আমরা আমাদের কোম্পানির সমস্ত কর্মীদের জন্মদিনের একটি তালিকা তৈরি করতে চাই৷ এটিতে নিম্নরূপ বিন্যাসিত 30টি স্ট্রিং থাকা উচিত: "সারাহ হাফম্যান, 25 জানুয়ারী" আমরা একটি অ্যারে নামক একটি বিশেষ ডেটা কাঠামো থেকে উপকৃত হব । যদি আমরা একটি অ্যারেকে একটি বাস্তব বস্তুর সাথে তুলনা করি, তবে এটি নিরাপত্তা আমানত বাক্সগুলির সাথে একটি ব্যাঙ্ক ভল্টের সাথে খুব মিল: অ্যারে সম্পর্কে কিছু - 1একটি অ্যারেতে "বক্স"ও থাকে। আপনি প্রতিটি বাক্সে কিছু (একটি উপাদান) রাখতে পারেন। একটি উপাদান অ্যাক্সেস করতে, আপনাকে তার বক্স নম্বর (সূচক) জানতে হবে। এইভাবে একটি অ্যারে তৈরি করা হয়:

public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10];
      
   }
}
এখানে আমরা একটি অ্যারে তৈরি করি যাতে 10টি উপাদান রয়েছে। আপনি অ্যারের কিছু বৈশিষ্ট্য অবিলম্বে নোট করতে পারেন:
  1. এটি একটি সু-সংজ্ঞায়িত ডেটা টাইপের উপাদান সংরক্ষণ করে । যদি আমরা একটি স্ট্রিং অ্যারে তৈরি করি, আমরা এতে অন্য কিছু সংরক্ষণ করতে পারি না। যখন অ্যারে তৈরি করা হয় তখন ডেটা টাইপ নির্দিষ্ট করা হয় । এখানেই এটি একটি নিরাপত্তা আমানত বাক্স থেকে পৃথক (যেখানে একজন গ্রাহক যা চান তা সঞ্চয় করতে পারেন)।

  2. অ্যারে তৈরি করার সময় এর আকার অবশ্যই নির্দিষ্ট করা উচিত । আপনি পরে এটি নির্দেশ করতে পারবেন না বা অ্যারে তৈরি হওয়ার পরে এর আকার পরিবর্তন করতে পারবেন না ।
আমরা যে একটি অ্যারে তৈরি করছি তা এক্সপ্রেশনের উভয় পাশে বর্গাকার বন্ধনী দ্বারা নির্দেশিত হয়। তারা রেফারেন্স ভেরিয়েবলের নামের আগে বা পরে নির্দিষ্ট করা যেতে পারে। যে কোন উপায়ে কাজ করবে:

String [] birthdays = new String[10];
String birthdays [] = new String[10];
আপনি যদি অ্যারেতে কিছু লিখতে চান তবে আপনাকে বাক্সের সূচকটি নির্দিষ্ট করতে হবে যেখানে মানটি লেখা হবে। একটি অ্যারের বাক্সগুলি 0 থেকে শুরু করে সংখ্যা করা হয়। শূন্য থেকে শুরু করে গণনা প্রোগ্রামিংয়ের একটি খুব সাধারণ অনুশীলন। আপনি যত দ্রুত এটিতে অভ্যস্ত হবেন, ততই ভাল :) এর মানে, আপনি যদি প্রথম বাক্সেঅ্যারে সম্পর্কে কিছু - 2 কিছু মান রাখতে চান তবে আপনি এটি করবেন:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
   }
}
এখন জনার জন্মদিন আমাদের কর্মচারীর জন্মদিনের অ্যারের প্রথম কক্ষে সংরক্ষণ করা হয়েছে: আপনি একইভাবে অন্যান্য মান যোগ করতে পারেন:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";
   }
}
মনে রাখবেন যে আমরা অষ্টম বক্সে রোজির জন্মদিন যোগ করেছি (আপনি ভুলে যাননি কেন বক্স নং 7 অষ্টম বাক্স, তাই না?) । আপনি দেখতে পাচ্ছেন যে আমরা অন্য সমস্ত ঘর পূরণ করিনি। আমরা ক্রমানুসারে একটি অ্যারের মধ্যে মান লিখতে হবে না. এরকম কোন প্রয়োজন নেই। অবশ্যই, উপাদানগুলিকে ক্রমানুসারে লেখার ফলে কতগুলি বাক্স বিনামূল্যে এবং কতগুলি দখল করা হয়েছে তার ট্র্যাক রাখা আরও সহজ করে তোলে এবং এটি অ্যারেটিকে "গর্ত" থাকা থেকে বাধা দেয়। আপনি যদি একটি বাক্সের বিষয়বস্তু পেতে চান, তাহলে (একটি নিরাপত্তা আমানত বাক্সের মতো) আপনাকে এর নম্বর জানতে হবে। এই তার কাজ হল কিভাবে:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       String rosieBirthday = birthdays[7];
       System.out.println(rosieBirthday);
   }
}
কনসোল আউটপুট: রোজি মিলস, 3 জানুয়ারী আমরা একটি Stringভেরিয়েবল তৈরি করেছি এবং কম্পাইলারকে বলেছি: " জন্মদিনের অ্যারেতে সূচক 7 সহ বাক্সটি খুঁজুন এবং সেখানে থাকা মানটি রোজি বার্থডে ভেরিয়েবলেরString সাথে বরাদ্দ করুন "। এবং যে এটা ঠিক কি. অ্যারেগুলির সাথে কাজ করার সময়, আমরা একটি বিশেষ বৈশিষ্ট্য ব্যবহার করে সহজেই তাদের দৈর্ঘ্য খুঁজে পেতে পারি: দৈর্ঘ্য

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[7] = "Rosie Mills, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
কনসোল আউটপুট: 10 দ্রষ্টব্য: lengthসম্পত্তি অ্যারের আকার সংরক্ষণ করে, পূর্ণ বাক্সের সংখ্যা নয়। আমাদের অ্যারে শুধুমাত্র 3 টি মান সঞ্চয় করে, কিন্তু আমরা এটি তৈরি করার সময় এটির আকার 10 হিসাবে নির্দেশ করেছিলাম। এবং এই ঠিক মান যে lengthক্ষেত্র রিটার্ন. কেন এই কাজে আসবে? ঠিক আছে, ধরুন আপনি সমস্ত জন্মদিনের একটি তালিকা প্রদর্শন করতে চান (যা যাচাই করতে কেউ ভুলে যায় না)। আপনি একটি সাধারণ লুপে এটি করতে পারেন:

public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Jana Russell, March 12";
       birthdays[1] = "Landon Chan, May 18";
       birthdays[2] = "Jeremiah Leonard, July 12";
       birthdays [3] = "Kenny Russo, September 7";
       birthdays[4] = "Tommie Barnes, November 9";
       birthdays [5] = "Roman Baranov, August 14";
       birthdays [6] = "Chanice Andersen, April 1";
       birthdays[7] = "Rosie Mills, January 3";
       birthdays [8] = "Keenan West, October 19";
       birthdays [9] = "Abraham McArthur, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
লুপে, আমরা ভেরিয়েবল ডিক্লেয়ার করি i, যা শূন্য থেকে শুরু হয়। প্রতিটি পাসে, আমরা আমাদের অ্যারে থেকে সূচক i সহ উপাদানটি পাই এবং এর মান প্রদর্শন করি। লুপটি 10টি পুনরাবৃত্তি করবে, এবং আমি 0 থেকে 9 পর্যন্ত বৃদ্ধি করব—এবং সংখ্যাগুলি আমাদের অ্যারের উপাদানগুলির সূচক হবে! ফলস্বরূপ, আমরা জন্মদিন[0] থেকে জন্মদিন[9] পর্যন্ত সমস্ত মান প্রদর্শন করব প্রকৃতপক্ষে, আপনি একটি অ্যারে তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি intএই মত s এর একটি অ্যারে তৈরি করতে পারেন:

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
এই কৌশলটিকে "শর্টকাট ইনিশিয়ালাইজেশন" বলা হয়। এটি বেশ সুবিধাজনক, কারণ আমরা একই সাথে একটি অ্যারে তৈরি করি এবং মান দিয়ে এটি পূরণ করি। আমাদের স্পষ্টভাবে অ্যারের আকার নির্দিষ্ট করতে হবে না: শর্টকাট আরম্ভের সাথে, ক্ষেত্রটি lengthস্বয়ংক্রিয়ভাবে সেট করা হয়।

public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
কনসোল আউটপুট: 9 এখন, কীভাবে অ্যারেগুলি মেমরিতে সংরক্ষণ করা হয় সে সম্পর্কে একটু। ধরা যাক আমাদের তিনটি অবজেক্টের অ্যারে আছে Cat:

public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Behemoth");
       cats[2] = new Cat("Lionel Messi");
   }
}
এখানে আপনাকে কয়েকটি জিনিস বুঝতে হবে:
  1. আদিম ক্ষেত্রে, একটি অ্যারে নির্দিষ্ট মানগুলির একটি সেট সংরক্ষণ করে (যেমন intগুলি)। বস্তুর ক্ষেত্রে, একটি অ্যারে রেফারেন্সের একটি সেট সংরক্ষণ করে ।
    অ্যারে catsতিনটি উপাদান নিয়ে গঠিত, যার প্রতিটি একটি বস্তুর রেফারেন্সCat । প্রতিটি রেফারেন্স মেমরি ঠিকানার দিকে নির্দেশ করে যেখানে সংশ্লিষ্ট বস্তুটি সংরক্ষণ করা হয়।

  2. অ্যারে উপাদানগুলি মেমরিতে একটি একক ব্লকে সাজানো হয়। এটি তাদের দ্রুত এবং দক্ষতার সাথে অ্যাক্সেস করার অনুমতি দেওয়ার জন্য করা হয়।
সুতরাং, catsমেমরির ব্লকের উল্লেখ করে যেখানে সমস্ত বস্তু (অ্যারে উপাদান) সংরক্ষণ করা হয়। Cats[0]এই ব্লকের মধ্যে একটি নির্দিষ্ট ঠিকানা উল্লেখ করে। অ্যারে সম্পর্কে কিছু - 3 এটা বোঝা গুরুত্বপূর্ণ যে একটি অ্যারে শুধুমাত্র বস্তু সংরক্ষণ করে না: এটি নিজেই একটি বস্তু। এটি আমাদের প্রশ্নের দিকে নিয়ে যায় যে আমরা কেবল স্ট্রিং বা সংখ্যার বিন্যাসই তৈরি করতে পারি না, বরং অ্যারের বিন্যাসও তৈরি করতে পারি । এবং উত্তর হল হ্যাঁ, আমরা পারি! একটি অ্যারে অন্যান্য অ্যারে সহ যেকোনো বস্তু সংরক্ষণ করতে পারে। এই ধরনের অ্যারেকে দ্বিমাত্রিক বলা হয় । যদি আমরা এটিকে দৃশ্যমানভাবে উপস্থাপন করি তবে এটি একটি সাধারণ টেবিলের মতোই হবে। ধরুন, আমরা 3টি অ্যারের একটি অ্যারে তৈরি করতে চাই যা প্রতিটি 10 int​​সেকেন্ড সংরক্ষণ করতে পারে। এটি এই মত দেখাবে:
অ্যারে সম্পর্কে কিছু - 4
প্রতিটি লাইন একটি intঅ্যারের প্রতিনিধিত্ব করে। প্রথম অ্যারেটিতে 1 থেকে 10 পর্যন্ত সংখ্যা রয়েছে, দ্বিতীয় অ্যারে - -1 থেকে -10 পর্যন্ত এবং তৃতীয়টিতে - এলোমেলো সংখ্যার একটি সেট। এই অ্যারেগুলির প্রতিটি আমাদের দ্বি-মাত্রিক অ্যারের বাক্সে সংরক্ষণ করা হয়। কোডে, একটি দ্বি-মাত্রিক অ্যারের আরম্ভ এই মত দেখায়:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
আমাদের দ্বি-মাত্রিক অ্যারে বিড়াল প্রতিটি অ্যারেতে 5টি বাক্স সহ 3টি অ্যারে সঞ্চয় করে । আমরা যদি দ্বিতীয় অ্যারের তৃতীয় বাক্সে একটি বস্তু রাখতে চাই , আমরা এটি করব:

public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluffy");
}
[1]দ্বিতীয় অ্যারে নির্দেশ করে, এবং [2]সেই অ্যারের তৃতীয় বাক্স নির্দেশ করে। যেহেতু একটি দ্বি-মাত্রিক অ্যারে বেশ কয়েকটি অ্যারে নিয়ে গঠিত, এটির মাধ্যমে পুনরাবৃত্তি করতে এবং এর সমস্ত মান প্রদর্শন করতে (বা এর সমস্ত উপাদানগুলিকে পূরণ করতে) আমাদের একটি নেস্টেড লুপ দরকার:

for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
বাইরের লুপে (ভেরিয়েবল i), আমরা আমাদের দ্বি-মাত্রিক অ্যারের সমস্ত অ্যারের উপর পুনরাবৃত্তি করি। অভ্যন্তরীণ লুপে (ভেরিয়েবল j), আমরা প্রতিটি অ্যারের সমস্ত উপাদানের মধ্য দিয়ে যাই। ফলস্বরূপ, বিড়ালগুলি[0][0] (প্রথম অ্যারে, প্রথম উপাদান) প্রথমে প্রদর্শিত হবে, তারপরে বিড়ালগুলি [0][1] (প্রথম অ্যারে, দ্বিতীয় উপাদান) প্রদর্শিত হবে। আমরা প্রথম অ্যারের মধ্য দিয়ে যাওয়ার পরে, আমরা cats[1][0] , cats[1][1] , cats[1][2] , ইত্যাদি প্রদর্শন করব৷ যাইহোক, দ্বি-মাত্রিক অ্যারেগুলিও সমর্থন করে৷ সংক্ষিপ্ত সূচনা:

int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
numbersসাধারণত, আমরা দ্বি-মাত্রিক অ্যারেকে একটি হিসাবে ঘোষণা করব int[3][3], কিন্তু এই সংক্ষেপে আমাদের মানগুলি অবিলম্বে নির্দিষ্ট করতে দেয়। কেন আপনি একটি দ্বিমাত্রিক অ্যারে প্রয়োজন হবে? ভাল, আপনি বিখ্যাত "ব্যাটলশিপ" গেমটি সহজেই পুনরায় তৈরি করতে একটি ব্যবহার করতে পারেন: অ্যারে সম্পর্কে কিছু - 5 "ব্যাটলশিপ"-এ, খেলার ক্ষেত্রের গঠনটি সহজেই বর্ণনা করা যেতে পারে: 10 টি উপাদান সহ 10 টি অ্যারেগুলির একটি দ্বি-মাত্রিক অ্যারে। আপনি এই দুটি অ্যারে তৈরি করুন (একটি আপনার জন্য এবং একটি আপনার প্রতিপক্ষের জন্য)

int[][] battleshipBoard1 = new int[10][10];
int[][] battleshipBoard2 = new int[10][10];
কিছু মান ব্যবহার করুন (যেমন সংখ্যা বা প্রতীক) আপনার জাহাজের অবস্থানের সাথে সম্পর্কিত উপাদানগুলিকে পপুলেট করার জন্য, এবং তারপর নির্দিষ্ট উপাদানগুলির জন্য স্থানাঙ্কগুলিকে কল করে বার করে নিন:
  • ব্যাটলশিপবোর্ড1[0][2]!
  • হারানো! ব্যাটলশিপবোর্ড2[2][4]!
  • আঘাত!
  • ব্যাটলশিপবোর্ড2[2][5]!
  • আঘাত!
  • ব্যাটলশিপবোর্ড2[2][6]!,
  • নিমজ্জিত !
এটি আমাদের অ্যারেগুলির প্রথম পরিচিতি শেষ করে, তবে এটি তাদের সাথে আমাদের মিথস্ক্রিয়া শুরু মাত্র। নিম্নলিখিত পাঠগুলিতে, আমরা তাদের ব্যবহার করার আকর্ষণীয় উপায়গুলি দেখতে পাব এবং জাভা-এর বিল্ট-ইন ফাংশনগুলিও শিখব যা আমাদের এই ডেটা কাঠামোর সাথে আরও সুবিধাজনকভাবে কাজ করতে দেয় :)
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION