অ্যারেটি শূন্য / খালি কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


137

আমার একটি intঅ্যারে রয়েছে যার কোনও উপাদান নেই এবং আমি এটি খালি কিনা তা যাচাই করার চেষ্টা করছি।

উদাহরণস্বরূপ, নীচের কোডে যদি আই-স্টেটমেন্টের শর্তটি সত্য হয় না কেন?

int[] k = new int[3];

if (k == null) {
    System.out.println(k.length);
}

আপনি কি কিছুটা কোড পোস্ট করতে পারেন দয়া করে? অ্যারে শুরু করা হয়েছে এমন বিটটি দেখতে কার্যকর হবে।
মার্ক পোপ

আমি নিশ্চিত আপনি কি জিজ্ঞাসা করছি না। অবশ্যই অ্যারেটি নাল কিনা তা পরীক্ষা করে দেখুন (অ্যারে == নাল)
পল

7
আপনি কি চান না (কে! = নাল)
বিকির্ক

উত্তর:


214

একটি nullঅ্যারে এবং খালি অ্যারের মধ্যে একটি মূল পার্থক্য রয়েছে । এটি একটি পরীক্ষা null

int arr[] = null;
if (arr == null) {
  System.out.println("array is null");
}

এখানে "খালি" এর কোনও অফিসিয়াল অর্থ নেই। আমি 0 টি উপাদান থাকার কারণে খালিটি সংজ্ঞায়িত করতে বেছে নিচ্ছি:

arr = new int[0];
if (arr.length == 0) {
  System.out.println("array is empty");
}

"খালি" একটি বিকল্প সংজ্ঞাটি যদি সমস্ত উপাদান থাকে null:

Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
  if (arr[i] != null) {
    empty = false;
    break;
  }
}

অথবা

Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
  if (ob != null) {
    empty = false;
    break;
  }
}

1
আপস, শেষ স্নিপেট obj !- nullসম্ভবত সম্ভবত বোঝানো হয়েছেobj != null
ব্যবহারকারী 85421

5
এ সম্পর্কে ভুলে যাবেন না: org.apache.commons.lang3.ArrayUtils.isEmpty (কে)
অহলুব 7

মনে রাখবেন, === কাজ করবে না। আপনার অবশ্যই == ব্যবহার করতে হবে কারণ nullএটি একটি ভিন্ন ধরণের।
মক


20

এর দৈর্ঘ্য দেখুন:

int[] i = ...;
if (i.length == 0) { } // no elements in the array

যদিও একই সাথে নাল পরীক্ষা করা নিরাপদ:

if (i == null || i.length == 0) { }

1
যদি আপনাকে নাল এবং দৈর্ঘ্য 0 উভয় পরীক্ষা করতে হয় তবে সম্ভাব্য নাল পয়েন্টার ত্রুটি এড়াতে প্রথমে নালটি পরীক্ষা করে নেওয়া গুরুত্বপূর্ণ
বিল মিলাগ্রো

6

নাল বা ফাঁকা জন্য অ্যারে চেক করার পদ্ধতিটিও org.apache.commons.lang এ উপস্থিত রয়েছে:

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);

5

আমি। নেট ব্যাকগ্রাউন্ড থেকে এসেছি। তবে জাভা / সি # আরও / কম একই।

আপনি যদি কোনও অ-আদিম ধরণের প্রকার (আপনার ক্ষেত্রে অ্যারে) ইনস্ট্যান্ট করেন তবে তা বাতিল হবে না।
উদাহরণস্বরূপ int[] numbers = new int[3];
, এই ক্ষেত্রে স্থান বরাদ্দ করা হয় এবং প্রতিটি উপাদানের 0 এর একটি ডিফল্ট মান থাকে।

এটা হবে null, যখন আপনি newএটি আপ না ।
যেমন

int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
   System.out.println("yes, it is null. Please new it up");
}

1
জাভাতে এটি সংকলন করবে না, কারণ এটি আপনাকে বলবে যে numbersএখনও আরম্ভ করা হয়নি। "একীকরণবিহীন" এবং nullএকই জিনিস নয়।
জোছিম সৌর

ধন্যবাদ জোয়াচিম আমি পোস্টটি int[] numbersপরিবর্তিত হয়ে সম্পাদনা করব int[] numbers == null; সি # তে, এটি ক্ষেত্রে নয়।
শাহকাল্পেশ

2

কোনও ইনট অ্যারে শূন্য দিয়ে শুরু করা হয় যাতে এটিতে কখনই নাল থাকে না। কেবলমাত্র অবজেক্টের অ্যারেগুলিতে প্রাথমিকভাবে শূন্য থাকবে।


আমাকে যদি পূর্ণসংখ্যার জন্য নাল পরীক্ষা করতে হয়
অঙ্কিত সাচান

1
আপনি ইন্টের মতো আদিমগুলির সাথে নাল পরীক্ষা করতে পারবেন না।
অবজেক্টস

2
আপনি এটি কোথায় ঘোষণা করেছেন তা নির্ভর করে, যদি কোনও শ্রেণি সদস্য হিসাবে, তবে হ্যাঁ এটি শূন্যের সাথে আরম্ভ করা হবে। তবে যখন কোনও পদ্ধতির অভ্যন্তরে স্থানীয়ভাবে ঘোষণা করা হয়, তখন আমি বিশ্বাস করি এটি অন্য একটি মামলা ... আপনাকে নিজেই একটি প্রাথমিক মান নির্ধারণ করতে হবে। আমি ধরে নিচ্ছি. শুধু একটি ভাবনা!
অতিশাহিনী

2

এখানে খুব সরল বিন্দুটি হ'ল ভ্যারিয়েবল k নাল নয় কারণ এটি অ্যারের দিকে নির্দেশ করে। অ্যারে নিজেই খালি আছে তা বিবেচ্য নয়। আপনার পোষ্টের নাল পরীক্ষাটি কেবল তখনই মূল্যায়ণ করবে যদি ভেরিয়েবল কে কোনও বিষয় নির্দেশ না করে।


2

আমি নীচে হিসাবে পরীক্ষা। আশা করি এটা সাহায্য করবে.

Integer[] integers1 = new Integer[10];
        System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array
        for (Integer integer : integers1) {
            System.out.println(integer); //prints all 0s
        }

//But if I manually add 0 to any index, now even though array has all 0s elements
//still it is not empty
//        integers1[2] = 0;
        for (Integer integer : integers1) {
            System.out.println(integer); //Still it prints all 0s but it is not empty
            //but that manually added 0 is different
        }

//Even we manually add 0, still we need to treat it as null. This is semantic logic.

        Integer[] integers2 = new Integer[20];
        integers2 = null; //array is nullified
//        integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. 
        if (integers2 == null) {
            System.out.println("null Array");
        }   

0

intউপাদান ছাড়াই একটি অ্যারে অগত্যা নয় null। এটি কেবল তখনই nullবরাদ্দ করা হয়নি। জাভা অ্যারে সম্পর্কে আরও তথ্যের জন্য এই টিউটোরিয়ালটি দেখুন ।

আপনি অ্যারের দৈর্ঘ্য পরীক্ষা করতে পারেন:

void foo(int[] data)
{
  if(data.length == 0)
    return;
}

0
    public boolean empty() {
    boolean isEmpty = true;
    int i = 0;
    for (int j = 0; j < array.length; j++) {
        if (array[j] != 0) {
            i++;
        }
    }
    if (i != 0) {
        isEmpty = false;
    }
    return isEmpty;
}

এটি যতটা কাছাকাছি আমি কোনও int অ্যারে খালি কিনা তা পরীক্ষা করে দেখতে পেলাম। যদিও এটি কাজ করবে না যখন অ্যারের ইনটগুলি আসলে শূন্য হয়। এটি {1,2,3} এর জন্য কাজ করবে এবং এটি এখনও return 2,0} তবে {0 true সত্য ফিরে আসায় মিথ্যা ফিরে আসবে


0

জাভা 8+ এ আপনি স্ট্রিম অলম্যাচ পদ্ধতির সাহায্যে এটি অর্জন করেছেন।

আদিমতার জন্য:

int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)

অবজেক্টের জন্য:

Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)

-1

আমি বিশ্বাস করি আপনি যা চান তা হ'ল

int[] k = new int[3];

if (k != null) {  // Note, != and not == as above
    System.out.println(k.length);
}

আপনি এটি নতুন করে তোলেন যাতে এটি কখনই শূন্য হয় না।


-1

অ্যারের দৈর্ঘ্য নির্ধারণ করে কোনও উপাদান রয়েছে কিনা তাও আপনি যাচাই করতে পারেন, তবে এটি নਾਲ কিনা তা যাচাই করার জন্য যদি-অন্য বিবৃতিতে রেখে দিন।

int[] k = new int[3];
if(k.length == 0)
{
//do something
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.