জাভাতে 2D অ্যারের অ্যারের দৈর্ঘ্য পাওয়া


129

সারি এবং কলাম উভয়ের জন্য আমার 2D অ্যারের দৈর্ঘ্য পেতে হবে। আমি নিম্নলিখিত কোডটি ব্যবহার করে সফলভাবে এটি করেছি:

public class MyClass {

 public static void main(String args[])
    {
  int[][] test; 
  test = new int[5][10];

  int row = test.length;
  int col = test[0].length;

  System.out.println(row);
  System.out.println(col);
    }
}

এটি প্রত্যাশিত হিসাবে 5, 10 প্রিন্ট করে।

এখন এই লাইনটি একবার দেখুন:

  int col = test[0].length;

খেয়াল করুন যে কলামটির দৈর্ঘ্য পেতে আমার আসলে একটি নির্দিষ্ট সারি উল্লেখ করতে হবে। আমার কাছে এটি অবিশ্বাস্যরূপে কুৎসিত বলে মনে হচ্ছে। অতিরিক্ত হিসাবে, অ্যারে হিসাবে সংজ্ঞা দেওয়া থাকলে:

test = new int[0][10];

তারপরে দৈর্ঘ্য পাওয়ার চেষ্টা করার সময় কোডটি ব্যর্থ হবে। এটি করার কোনও আলাদা (আরও বুদ্ধিমান) উপায় আছে কি?


আমি নীচের রেফারেন্সটি বেশ ব্যাপকভাবে পেয়েছি, programiz.com/java-pogramming/m
মাল্টিডিমাইশনাল-

উত্তর:


182

বিবেচনা

public static void main(String[] args) {

    int[][] foo = new int[][] {
        new int[] { 1, 2, 3 },
        new int[] { 1, 2, 3, 4},
    };

    System.out.println(foo.length); //2
    System.out.println(foo[0].length); //3
    System.out.println(foo[1].length); //4
}

প্রতি সারিতে কলামের দৈর্ঘ্য পৃথক। আপনি যদি কোনও স্থির আকার 2D অ্যারে দিয়ে কিছু ডেটা ব্যাক করছেন তবে একটি মোড়কের ক্লাসে স্থির মানগুলিতে গেটার সরবরাহ করুন।


1
আপনার উত্তর সম্পর্কে সম্পর্কিত সম্পর্কিত প্রশ্ন। আপনি "{...}" যেখানে রেখেছেন সেখানে কী কৌশল / পদ্ধতি বলা হয়? অবজেক্ট সংজ্ঞা পরে। নতুন বিকাশকারী হিসাবে আমি এটিকে আরও বেশি করে দেখছি।
user432209

ঠিক আছে, আমি অনেক বুঝতে পেরেছি :)। আমি কেবল ভেবেছিলাম কৌশলটির কোনও নির্দিষ্ট নাম থাকতে পারে।
user432209

নিশ্চিত না যে এর নাম কী - অবজেক্ট ইনিশিয়ালাইজেশন? ইনলাইন আরম্ভ? আমাদের জাভা গুরুদের একজন জানতে পারবেন
এনজি।

8
জেএলএস 10.6 এবং 15.10 অনুসারে, কোঁকড়া ধনুর্বন্ধনী অংশটি কেবল একটি অ্যারে প্রারম্ভিক হয়, যখন নতুন দিয়ে শুরু করা পুরো জিনিসটি অ্যারে ক্রিয়েশন এক্সপ্রেশন হয়।
আইএলএমটাইটান

17

একটি 2 ডি অ্যারে একটি আয়তক্ষেত্রাকার গ্রিড নয়। বা সম্ভবত আরও ভাল, জাভাতে 2D অ্যারের মতো কোনও জিনিস নেই।

import java.util.Arrays;

public class Main {
  public static void main(String args[]) {

    int[][] test; 
    test = new int[5][];//'2D array'
    for (int i=0;i<test.length;i++)
      test[i] = new int[i];

    System.out.println(Arrays.deepToString(test));

    Object[] test2; 
    test2 = new Object[5];//array of objects
    for (int i=0;i<test2.length;i++)
      test2[i] = new int[i];//array is a object too

    System.out.println(Arrays.deepToString(test2));
  }
}

আউটপুট

[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]
[[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0]]

অ্যারে test এবং test2(কম বা কম) একই রকম।


12

এটা মনে রাখা সত্যিই কঠিন ছিল

    int numberOfColumns = arr.length;
    int numberOfRows = arr[0].length;

আসুন বুঝতে পারি যে এটি কেন এমন এবং যখন আমরা কোনও অ্যারে সমস্যা দিই তখন আমরা এটি কীভাবে নির্ধারণ করতে পারি। নীচের কোড থেকে আমরা দেখতে পাচ্ছি যে সারিগুলি = 4 এবং কলাম = 3:

    int[][] arr = { {1, 1, 1, 1}, 

                    {2, 2, 2, 2}, 

                    {3, 3, 3, 3} };

arrএতে একাধিক অ্যারে রয়েছে এবং কলামগুলির সংখ্যা পাওয়ার জন্য এই অ্যারেগুলি উল্লম্বভাবে সাজানো যেতে পারে। সারিগুলির সংখ্যা পেতে, আমাদের প্রথম অ্যারে অ্যাক্সেস করতে হবে এবং এর দৈর্ঘ্য বিবেচনা করতে হবে। এই ক্ষেত্রে, আমরা [1, 1, 1, 1] অ্যাক্সেস করি এবং এর ফলে সারিগুলির সংখ্যা = 4 হয় When n এক্স মি মাত্রা এবং সিদ্ধান্তে পৌঁছে যে আমরা প্রথম অ্যারেটি তার দৈর্ঘ্যে অ্যাক্সেস করে সারিগুলির সংখ্যা পেতে পারি। অন্য একটি ( arr.length) কলামগুলির জন্য।


8
আপনার এই পিছনের দিকে আছে। "এই ক্ষেত্রে, আমরা [1, 1, 1, 1] অ্যাক্সেস করি এবং এভাবে সারি সংখ্যা = 4" আসলে, এর অর্থ এখানে 4 টি কলাম রয়েছে।
ইভান রোজিকা

ইভান রোজিকা ঠিক করুন
নীতিন নন্দ

5

জাভা আপনাকে "রাগযুক্ত অ্যারে" তৈরি করতে দেয় যেখানে প্রতিটি "সারি" এর দৈর্ঘ্য আলাদা থাকে। আপনি যদি জানেন যে আপনার বর্গাকার অ্যারে রয়েছে, আপনি খালি অ্যারে থেকে রক্ষা করতে আপনার কোডটি সংশোধিত ব্যবহার করতে পারেন:

if (row > 0) col = test[0].length;

4

আপনার যদি এই অ্যারে থাকে:

String [][] example = {{{"Please!", "Thanks"}, {"Hello!", "Hey", "Hi!"}},
                       {{"Why?", "Where?", "When?", "Who?"}, {"Yes!"}}};

তুমি এটি করতে পারো:

example.length;

= 2

example[0].length;

= 2

example[1].length;

= 2

example[0][1].length;

= 3

example[1][0].length;

= 4


আমি এর আগে একটি অনুরূপ উত্তর দেখেছি তবে আমি মনে করি এটি উদাহরণ সহ বোঝা সহজ!

3

ভাষা স্তরে কোনও পরিষ্কার উপায় নেই কারণ সমস্ত বহুমাত্রিক অ্যারেগুলি আয়তক্ষেত্রাকার নয়। কখনও কখনও জাজড (কলামের দৈর্ঘ্যের ভিন্ন) অ্যারেগুলি প্রয়োজনীয়।

আপনার প্রয়োজনীয় কার্যকারিতা বিমূর্ত করতে আপনি সহজেই নিজের ক্লাস তৈরি করতে পারেন।

যদি আপনি অ্যারেগুলিতে সীমাবদ্ধ না হন তবে সম্ভবত বিভিন্ন সংগ্রহের কিছু ক্লাস মাল্টিম্যাপের মতো কাজ করবে ।


1

। দৈর্ঘ্য = সারি সংখ্যা / কলাম দৈর্ঘ্য

[0] দৈর্ঘ্য = কলাম / সারির দৈর্ঘ্যের সংখ্যা


1
তাই আপনাকে স্বাগতম। আপনার উত্তরে আপনার আরও কিছু ব্যাখ্যা যুক্ত করা উচিত।
m02ph3u5

0

জাভাতে 2 ডি অ্যারের জন্য নিম্নলিখিত প্রোগ্রামটি ব্যবহার করে দেখুন:

public class ArrayTwo2 {
    public static void main(String[] args) throws  IOException,NumberFormatException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        int[][] a;
        int sum=0;
        a=new int[3][2];
        System.out.println("Enter array with 5 elements");
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            a[i][j]=Integer.parseInt(br.readLine());
            }
        }
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a[0].length;j++)
            {
            System.out.print(a[i][j]+"  ");
            sum=sum+a[i][j];
            }
        System.out.println();   
        //System.out.println("Array Sum: "+sum);
        sum=0;
        }
    }
}

0
import java.util.Arrays;

public class Main {

    public static void main(String[] args) 
    {

        double[][] test = { {100}, {200}, {300}, {400}, {500}, {600}, {700}, {800}, {900}, {1000}};

        int [][] removeRow = { {0}, {1}, {3}, {4}, };

        double[][] newTest = new double[test.length - removeRow.length][test[0].length];

        for (int i = 0, j = 0, k = 0; i < test.length; i++) {
            if (j < removeRow.length) {
                if (i == removeRow[j][0]) {
                    j++;
                    continue;
                }
            }
            newTest[k][0] = test[i][0];
            k++;
        }

        System.out.println(Arrays.deepToString(newTest));   
    }
}

দশমিক বিন্দু হারাতে [[300.0], [600.0], [700.0], [800.0], [900.0], [1000.0]] ইনটগুলিতে রূপান্তরিত করবে। এই সমাধানটি ধরে নেয় আপনার ইনপুট অ্যারে সর্বদা আকারের হবে [[x] [1])
RobynVG

0

এর সাথে Java 8, আপনাকে এর মতো আরও মার্জিত কিছু করার অনুমতি দিন:

int[][] foo = new int[][] {
        new int[] { 1, 2, 3 },
        new int[] { 1, 2, 3, 4},
    };

int length = Arrays.stream(array).max(Comparator.comparingInt(ArrayUtils::getLength)).get().length

-2
public class Array_2D {
int arr[][];
public Array_2D() {
    Random r=new Random(10);
     arr = new int[5][10];
     for(int i=0;i<5;i++)
     {
         for(int j=0;j<10;j++)
         {
             arr[i][j]=(int)r.nextInt(10);
         }
     }
 }
  public void display()
  {
         for(int i=0;i<5;i++)

         {
             for(int j=0;j<10;j++)
             {
                 System.out.print(arr[i][j]+" "); 
             }
             System.out.println("");
         }
   }
     public static void main(String[] args) {
     Array_2D s=new Array_2D();
     s.display();
   }  
  }

1
এটি প্রশ্নের সাথে সম্পর্কিত নয়
alfonso.kim
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.