দ্বিমাত্রিক অ্যারে তৈরির জন্য সিনট্যাক্স


438

বিবেচনা:

int[][] multD = new int[5][];
multD[0] = new int[10];

আপনি কী 5 টি সারি এবং 10 কলাম সহ দ্বিমাত্রিক অ্যারেটি তৈরি করেন?

আমি এই কোডটি অনলাইনে দেখেছি, তবে সিনট্যাক্সটির কোনও অর্থ নেই।


হ্যাঁ প্রথম বিবৃতিতে 10 টি কলাম থাকা হিসাবে দ্বিমাত্রিক অ্যারেও সংজ্ঞায়িত করতে পারে। int [] [] মাল্টড = নতুন ইনট [5] [10];
প্রতিশ্রুতিবদ্ধ

উত্তর:


814

নিম্নলিখিত চেষ্টা করুন:

int[][] multi = new int[5][10];

... যা এই জাতীয় কিছু জন্য একটি সংক্ষিপ্ত হাত:

int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];

লক্ষ্য করুন যে উপাদানের জন্য ডিফল্ট মানে সক্রিয়া করা হবে int, 0, তাই উপরে এছাড়াও সমতূল্য আছেন:

int[][] multi = new int[][]{
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

27
মজাদার অংশটি হ'ল বিভিন্ন সারিতেও আপনার বিভিন্ন কলাম থাকতে পারে। উদাহরণস্বরূপ: - int [] [] বহু = নতুন অন্তর্ [5] []; বহুগুণ [0] = নতুন ইনট [10]; বহুগুণ [1] = নতুন ইনট [6]; মাল্টি [2] = নতুন ইনট [9] এছাড়াও পুরোপুরি বৈধ
জাভটেক

2
হাই মুনিব, যদি আমি সঠিকভাবে বুঝতে পারি, আপনি প্রতিটি সারিটির জন্য বিভিন্ন কলামের আকার সহ, মানগুলি কীভাবে নির্ধারণ করবেন, একটি বহুমাত্রিক অ্যারে জিজ্ঞাসা করছেন। এখানে কীভাবে: int [] [] বহু = নতুন অন্তর্ [] [] {{1,2,3}, {1,2,3,4}, {1}}; এবং আপনি এগুলিতে এগুলি অ্যাক্সেস / মুদ্রণ করতে পারেন: (int i = 0; i <বহু দৈর্ঘ্য; i++) {এর জন্য (int j = 0; j <বহু [i]। দৈর্ঘ্য; জে ++) {System.out.println ( "সারি:" + i + "কলাম:" + জ + "মান:" + বহু [i] [জে]); }}
জাভাটেক

1
আমরা ব্যবহার করতে হবে না new int[][]=new int[][]{...}বৈকল্পিক? আমরা কি শুধু লিখতে পারি ={...}?
নওয়াজ

2
@ নাওয়াজ নো, অ্যারে জাভাতে অবজেক্ট এবং মেমরি কেবল newকীওয়ার্ড ব্যবহার করে অবজেক্টগুলিতে বরাদ্দ করা হয় ।
রুটট্রেলার

1
@ ওলড্রিনব কি int array[][] = new int[3][];ভিএস সম্পর্কে int array[][] = new int[][3];?? উভয় সংস্করণটি কোথাও পড়েছি বলে কোনটি বৈধ।
রুটট্রেলার

77

আমরা একটি দ্বি মাত্রিক অ্যারে ঘোষণা করতে পারি এবং এর ঘোষণার সময় উপাদানগুলি সরাসরি সংরক্ষণ করতে পারি:

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

এখানে int অ্যারেতে সংরক্ষিত পূর্ণসংখ্যার ধরণের উপাদানগুলির প্রতিনিধিত্ব করে এবং অ্যারের নামটি 'চিহ্ন'। ইনট হ'ল "{" এবং "}" ধনুর্বন্ধনীগুলির অভ্যন্তরে উপস্থাপিত সমস্ত উপাদানগুলির জন্য ডেটাটাইপ কারণ একটি অ্যারে একই ডাটা টাইপের উপাদানগুলির সংগ্রহ।

উপরে লেখা আমাদের বিবৃতিতে ফিরে আসছি: প্রতিটি সারির উপাদানগুলি কোঁকড়ানো ধনুর্বন্ধনী ব্রেসগুলির মধ্যে লিখতে হবে। প্রতিটি সারিতে থাকা সারি এবং উপাদানগুলি একটি কমা দ্বারা পৃথক করা উচিত।

এখন বিবৃতিটি পর্যবেক্ষণ করুন: আপনি এখানে 3 টি সারি এবং 5 টি কলাম পেতে পারেন, তাই জেভিএম 3 * 5 = 15 টি মেমরির ব্লক তৈরি করে। এই ব্লকগুলি পৃথকভাবে তা হিসাবে উল্লেখ করা যেতে পারে:

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]


দ্রষ্টব্য:
আপনি যদি এন উপাদান সংরক্ষণ করতে চান তবে অ্যারে সূচকটি শূন্য থেকে শুরু হয়ে এন -1 এ শেষ হবে । দ্বিমাত্রিক অ্যারে তৈরির আরেকটি উপায় হ'ল প্রথমে অ্যারে ঘোষণা করা এবং তারপরে নতুন অপারেটর ব্যবহার করে এর জন্য মেমরি বরাদ্দ করা।

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

উপরের দুটি সংযুক্ত করে আমরা লিখতে পারি:

int marks[][] = new int[3][5];

আমি মনে করি এটি ডেটা প্রবেশের সর্বাধিক বিবেচ্য উপায়।
thanos.a

51

অন্যরা উল্লিখিতভাবে আপনি সেগুলি তৈরি করতে পারেন। আরও একটি বিষয় যুক্ত করতে: আপনি এমনকি প্রতিটি সারি দিয়ে একটি স্কিউ দ্বি-মাত্রিক অ্যারে তৈরি করতে পারেন, অগত্যা একই সংখ্যক সংঘর্ষের সংস্থান নেই, এর মতো:

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];

5
ভাল বলেছ! এটি স্বাধীন আরম্ভকরণের সবচেয়ে গুরুত্বপূর্ণ বিষয়।
আহমেদ

@ ভিক্টর int array[][] = new int[3][];ভিএস সম্পর্কে কি int array[][] = new int[][3];?? উভয় সংস্করণটি কোথাও পড়েছি বলে কোনটি বৈধ।
রুট ট্র্যাভেলার

30

5 সারি এবং 10 কলাম সহ দ্বিমাত্রিক অ্যারে তৈরির সবচেয়ে সাধারণ প্রতিমাটি হ'ল:

int[][] multD = new int[5][10];

বিকল্পভাবে, আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন যা আপনার কাছে যা আছে তার থেকে অনেক বেশি অনুরূপ, যদিও আপনাকে প্রতিটি সারি স্পষ্টতই শুরু করতে হবে:

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}

3
এছাড়াও বুঝতে পারেন যে কেবল আদিমদের প্রাথমিককরণের প্রয়োজন হয় না। আপনি যদি অ্যারে হিসাবে ঘোষণা করেন Object[][] ary2d = new Object[5][10];তবে আপনাকে এখনও 2 ডি অ্যারের প্রতিটি উপাদানকে আরম্ভ করতে হবে।
আরমান্ড

3
আপনি nullযদি কোনও অ আদিম ব্যক্তিদের জন্য কেসটি নিরাপদে পরিচালনা না করেন । আপনার প্রতিটি উপাদান সূচনা করা উচিত কিনা তা সম্পূর্ণ আপনার নকশার উপর নির্ভর করে। এছাড়াও, কেবল স্পষ্ট করার জন্য - আদিমগুলি বাতিল হতে পারে না এবং আপনার দ্বারা নির্ধারিত না হলে সংজ্ঞায়িত ডিফল্ট মানটিতে ইনস্ট্যান্টিয়েট করা যায় get উদাহরণস্বরূপ intশূন্য হতে পারে না এবং আপনি int i;কোনও মান নির্ধারণ না করে বললে , এর মধ্যে একটি ডিফল্ট 0ব্যবহার করা হয়। এটি সম্পর্কে এখানে পড়ুন
অবিভাজ্য

আরও একটি ব্যাখ্যা, ডিফল্ট মানগুলি কেবল শ্রেণি / ইনস্ট্যান্স ভেরিয়েবলের হাতে দেওয়া হয়। স্থানীয় ভেরিয়েবলগুলি (অভ্যন্তরীণ পদ্ধতিগুলি) ব্যবহারের আগে ম্যানুয়ালি শুরু করতে হবে।
অবিভাজ্য

12

এটি নিম্নলিখিত উপায়ে ঘোষণা করাও সম্ভব। এটি ভাল নকশা নয়, তবে এটি কার্যকর হয়।

int[] twoDimIntArray[] = new int[5][10];

9

চেষ্টা করুন:

int[][] multD = new int[5][10];

মনে রাখবেন যে আপনার কোডে কেবল 2D অ্যারের প্রথম লাইনটি 0 এ সূচনা করা হয় 2 লাইন 2 থেকে 5 পর্যন্ত উপস্থিত নেই। আপনি যদি এগুলি মুদ্রণের চেষ্টা করেন তবে আপনি তাদের nullসবার জন্য পাবেন ।


8
int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i

8

জাভাতে, দ্বিমাত্রিক অ্যারেটিকে এক-মাত্রিক অ্যারে হিসাবে একই হিসাবে ঘোষণা করা যেতে পারে। এক মাত্রিক অ্যারেতে আপনি লিখতে পারেন

  int array[] = new int[5];

যেখানে int হ'ল ডেটা টাইপ হয়, অ্যারে [] একটি অ্যারে ডিক্লেয়ারেশন এবং new array পাঁচটি সূচী সহ এটির বস্তুগুলির সাথে একটি অ্যারে হয়।

এর মতো, আপনি নিম্নলিখিত হিসাবে একটি দ্বিমাত্রিক অ্যারে লিখতে পারেন।

  int array[][];
  array = new int[3][4];

এখানে array একটি int তথ্য টাইপ। আমি প্রথমে এই ধরণের এক-মাত্রিক অ্যারেতে ঘোষণা করেছি, তারপরে একটি 3 সারি এবং 4 টি কলাম অ্যারে তৈরি করা হবে।

আপনার কোডে

int[][] multD = new int[5][];
multD[0] = new int[10];

এর অর্থ হ'ল আপনি পাঁচটি সারি সহ একটি দ্বিমাত্রিক অ্যারে তৈরি করেছেন। প্রথম সারিতে 10 টি কলাম রয়েছে। জাভাতে আপনি প্রতিটি ইচ্ছেমতো কলামের আকার পছন্দ হিসাবে বেছে নিতে পারেন।


7
int rows = 5;
int cols = 10;

int[] multD = new int[rows * cols];

for (int r = 0; r < rows; r++)
{
  for (int c = 0; c < cols; c++)
  {
     int index = r * cols + c;
     multD[index] = index * 2;
  }
}

উপভোগ করুন!


1
এটি এমন ভাষায় কার্যকর হবে যা সি এর মতো 2D অ্যারে সমর্থন করে না!
আলা

3
সি বহুমাত্রিক অ্যারেগুলিকেও সমর্থন করে।
রিকার্ডো ক্রুজ


3

এই ধরণের অ্যারেগুলি জাভাতে জেগড অ্যারে হিসাবে পরিচিত:

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

এই দৃশ্যে অ্যারের প্রতিটি সারিতে কলামের বিভিন্ন সংখ্যা রয়েছে। উপরের উদাহরণে প্রথম সারিতে তিনটি কলাম, দ্বিতীয় সারিতে দুটি কলাম এবং তৃতীয় সারিতে পাঁচটি কলাম থাকবে hold আপনি নীচের মত সংকলন সময়ে এই অ্যারে শুরু করতে পারেন:

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

আপনি সহজেই আপনার অ্যারেতে সমস্ত উপাদান পুনরাবৃত্তি করতে পারেন:

for (int i = 0; i<multD.length; i++) {
    for (int j = 0; j<multD[i].length; j++) {
        System.out.print(multD[i][j] + "\t");
    }
    System.out.println();
}

0

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

int[][]   ar  = new int[2][];
int[][][] ar  = new int[2][][];
int[][]   ar  = new int[2][2]; // 2x2 array with zeros

এটি আমাদের একটি বিচক্ষণতা দেয়। সাব-অ্যারের আকার আরও উপাদান যুক্ত করে পরিবর্তন করা যায় না, তবে আমরা স্বেচ্ছাচারিতার আকারের একটি নতুন অ্যারে নির্ধারণ করে এটি করতে পারি।

int[][]   ar  = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1]    = new int[] {1,2,3,4,5,6}; // works
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.