1. দ্বি-মাত্রিক অ্যারে

অ্যারে সম্পর্কে আরও একটি আকর্ষণীয় তথ্য। অ্যারেগুলি শুধুমাত্র এক-মাত্রিক (রৈখিক) নয়। তারা দ্বিমাত্রিকও হতে পারে।

যে, আপনি জিজ্ঞাসা অর্থ কি?

এর মানে হল যে অ্যারের কোষগুলি শুধুমাত্র একটি কলাম (বা সারি) নয়, একটি আয়তক্ষেত্রাকার টেবিলও উপস্থাপন করতে পারে।

int[][] name = new int[width][height];

যেখানে নাম হল অ্যারের ভেরিয়েবলের নাম, প্রস্থ হল টেবিলের প্রস্থ (কোষে) এবং উচ্চতা হল টেবিলের উচ্চতা। উদাহরণ:

int[][] data = new int[2][5];
data[1][1] = 5;
আমরা একটি দ্বি-মাত্রিক অ্যারে তৈরি করি: 2টি কলাম এবং 5টি সারি।
সেল (1, 1) থেকে 5 লিখুন।

এটি মেমরিতে এইভাবে দেখাবে:

দ্বি-মাত্রিক অ্যারে

যাইহোক, আপনি দ্বি-মাত্রিক অ্যারেগুলির জন্য দ্রুত আরম্ভ ব্যবহার করতে পারেন:

// Lengths of months of the year in each quarter
int[][] months = { {31, 28, 31}, {30, 31, 30}, {31, 31, 30}, {31, 30, 31} };

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

দ্বি-মাত্রিক অ্যারে 2

দ্বি-মাত্রিক অ্যারে দাবা বা সমুদ্র যুদ্ধের জন্য উপযুক্ত। আমাদের কেবলমাত্র কোষ স্থানাঙ্ক গঠনের সংখ্যা দরকার। 'pawn e2-e4' নয়, 'pawn (5,2) -> (5,4)'। এটি একটি প্রোগ্রামার হিসাবে আপনার জন্য আরও সহজ হবে।


2. অ্যারেতে উপাদান সাজানো: (x, y) বা (y, x)

যাইহোক, এখানে একটি আকর্ষণীয় দ্বিধা আছে:

যখন আমরা ব্যবহার করে একটি অ্যারে তৈরি করি , তখন আমাদের কি 'দুটি সারি এবং 5টি কলামnew int[2][5]; ' এর একটি টেবিল থাকে নাকি এটি 'দুই কলাম এবং 5টি সারি '? অন্য কথায়, আমরা কি প্রথমে প্রস্থ এবং তারপর উচ্চতা নির্দিষ্ট করছি... অথবা তদ্বিপরীত, প্রথমে উচ্চতা এবং তারপর প্রস্থ? আচ্ছা, আমরা প্রায়শই বলি, এখানে সবকিছু এত সহজ নয়।

অ্যারে কিভাবে মেমরিতে সংরক্ষণ করা হয় সেই প্রশ্ন দিয়ে শুরু করা যাক ।

অবশ্যই, কম্পিউটার মেমরিতে আসলে একটি ম্যাট্রিক্স থাকে না: মেমরির প্রতিটি অবস্থানের একটি ক্রমিক সংখ্যাসূচক ঠিকানা থাকে: 0, 1, 2, ... আমাদের ক্ষেত্রে, আমরা 2 × 5 ম্যাট্রিক্সের কথা বলি, কিন্তু মেমরিতে এটি মাত্র 10টি পরপর কোষ, এর বেশি কিছু নয়। সারি এবং কলামগুলি কোথায় রয়েছে তা কিছুই নির্দেশ করে না।

"প্রস্থ x উচ্চতা" এর পক্ষে যুক্তি।

এই পদ্ধতির পক্ষে যুক্তি হল যে প্রত্যেকে স্কুলে গণিত শেখে, যেখানে তারা শিখে যে স্থানাঙ্ক জোড়া 'x' (অর্থাৎ, অনুভূমিক অক্ষ) এবং তারপর 'y' (উল্লম্ব মাত্রা) হিসাবে লেখা হয়। এবং এটি শুধুমাত্র একটি স্কুল মান নয় - এটি গণিতে একটি সাধারণভাবে স্বীকৃত মান। যেমন তারা বলে, আপনি গণিতের সাথে তর্ক করতে পারবেন না। তাই নাকি? প্রথমে প্রস্থ তারপর উচ্চতা?

"উচ্চতা x প্রস্থ" এর পক্ষে যুক্তি।

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

// Matrix of important data
int[][] matrix = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };

তুমি কি কিছু খেয়াল করো না? আমরা যদি এই আছে কি?

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {1, 2, 3, 4, 5}
};

যদি আমরা কোড লাইনে আমাদের ডেটা লাইন দ্বারা লিখি, তাহলে আমরা 2টি সারি এবং 5টি কলাম সহ একটি ম্যাট্রিক্স পাব।

শেষের সারি

আমরা কি বলতে পারি? কোনটি আপনার জন্য বেশি সুবিধাজনক তা সিদ্ধান্ত নেওয়া আপনার উপর নির্ভর করে। সবচেয়ে গুরুত্বপূর্ণ বিষয় হল একই প্রকল্পে কাজ করা সমস্ত প্রোগ্রামার একই পদ্ধতিতে লেগে থাকে।

আপনি যদি এমন একটি প্রকল্পে কাজ করেন যার কোডে প্রচুর প্রাথমিক দ্বি-মাত্রিক অ্যারে রয়েছে, তাহলে সম্ভবত সেখানে সবকিছুই দ্রুত ডেটা প্রারম্ভিকতার উপর ভিত্তি করে হবে, অর্থাৎ আপনার মান 'উচ্চতা x প্রস্থ' থাকবে।

আপনি যদি প্রচুর পরিমাণে গণিত জড়িত এবং স্থানাঙ্কের সাথে কাজ করে এমন একটি প্রকল্পে নিজেকে খুঁজে পাওয়ার জন্য যথেষ্ট ভাগ্যবান হন (উদাহরণস্বরূপ, গেম ইঞ্জিন), তাহলে কোডটি সম্ভবত 'প্রস্থ x উচ্চতা' পদ্ধতি অবলম্বন করবে।


3. কিভাবে দ্বি-মাত্রিক অ্যারে সাজানো হয়

এবং এখন আপনি শিখবেন কিভাবে দ্বি-মাত্রিক অ্যারেগুলি আসলে সাজানো হয়। প্রস্তুত?

দ্বিমাত্রিক অ্যারে আসলে অ্যারের অ্যারে!

অন্য কথায়, যদি একটি সাধারণ অ্যারের ক্ষেত্রে একটি অ্যারে ভেরিয়েবল অ্যারের উপাদানগুলিকে সংরক্ষণ করে এমন একটি ধারকটির একটি রেফারেন্স সঞ্চয় করে, তবে দ্বি-মাত্রিক অ্যারের ক্ষেত্রে পরিস্থিতিটি কিছুটা বিস্ফোরিত হয়: একটি দ্বি-মাত্রিক-অ্যারে ভেরিয়েবল একটি সংরক্ষণ করে। একটি পাত্রের রেফারেন্স যা এক-মাত্রিক অ্যারের রেফারেন্স সংরক্ষণ করে। এটি একশত বার ব্যাখ্যা করার চেষ্টা করার চেয়ে একবার কর্মে দেখা ভাল:

কিভাবে দ্বি-মাত্রিক অ্যারে সাজানো হয়

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

এভাবেই দ্বি-মাত্রিক অ্যারে কাজ করে। এবং এই পদ্ধতিটি জাভা প্রোগ্রামারকে বিভিন্ন সুবিধা দেয়:

প্রথমত , যেহেতু 'কন্টেইনারের ধারক' 'সারির অ্যারে'-এর উল্লেখ করে, তাই আমরা খুব দ্রুত এবং সহজে সারি অদলবদল করতে পারি। একটি 'পাত্রের ধারক' পেতে, আপনাকে দুটির পরিবর্তে একটি সূচক নির্দিষ্ট করতে হবে। উদাহরণ:

int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];

এই কোডটি আপনাকে সারি অদলবদল করতে দেয়:

// Matrix of important data
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {5, 4, 3, 2, 1}
};

int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
দ্বি-মাত্রিক অ্যারে





matrix[0]প্রথম সারির একটি রেফারেন্স সঞ্চয় করে।
আমরা রেফারেন্স অদলবদল.

ফলস্বরূপ, matrixঅ্যারে এই মত দেখায়:
{
  {5, 4, 3, 2, 1},
  {1, 2, 3, 4, 5}
};

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