জাভাতে কোনও নির্দিষ্ট মান থেকে অ্যারের সমস্ত উপাদানকে কীভাবে সূচনা করতে হয়


108

ইন C/C++আমরা আছে memset()ফাংশন যা আমার ইচ্ছা পূর্ণ করা কিন্তু পারেন Javaআমি কিভাবে একটি নির্দিষ্ট মান সব উপাদান আরম্ভ করতে পারেন? যখনই আমরা লিখি int[] array=new int[10];, এটি কেবলমাত্র 10 মাপের অ্যারের সূচনা করে সমস্ত উপাদান শূন্যের সমান হয়। আমি কেবলমাত্র আমার অ্যারেগুলির জন্য এই আরম্ভের পূর্ণসংখ্যাটি পরিবর্তন করতে চাই। অর্থাত্ আমি একটি অ্যারে শুরু করতে চাই যার সাথে সমস্ত উপাদান সমান -1। অন্যথায় আমাকে forআরম্ভের ঠিক পরে একটি লুপ রাখতে হবে যা সূচক 0থেকে সূচক size-1এবং সেই লুপের অভ্যন্তরে, আমি উপাদানটি বরাদ্দ করছি -1। আরও বোঝার জন্য নীচে কোড-

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

আমি কি ঠিক যাচ্ছি? একই জন্য অন্য কোন উপায় আছে?

উত্তর:


212

এটি যদি আদিম ধরণের হয় তবে আপনি এটি ব্যবহার করতে পারেন Arrays.fill():

Arrays.fill(array, -1);

[ প্রসঙ্গত, memsetসি বা সি ++ এ কেবলমাত্র অ্যারে ব্যবহারের জন্য আসল ব্যবহার char]


17
আমি এর উত্স কোডটি যাচাই করেছি Arrays.fill()। এটি একই জিনিস করে। public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
রবি জোশী

2
হাঁ। হিসাবে এটি করা উচিত. যদিও আমি সন্দেহ করি যে জেআইটি প্রাথমিক বাস্তবায়নের উন্নতির জন্য যথেষ্ট স্মার্ট হতে পারে।
লুই ওয়াসারম্যান

1
আমি একমত নই memsetযখন আপনাকে পূরণ করতে হবে 0বা -1উদাহরণস্বরূপ, ডিপি সমস্যাগুলির ক্ষেত্রে পূর্ণসংখ্যার অ্যারেগুলিতে ব্যবহার করা যায় এবং বাস্তবে এটি খুব কার্যকর ।
Sнаđошƒаӽ

@ এসнаđошƒаӽ - পোর্টেবল উপায়ে নয়।
অলিভার চার্লসওয়ার্থ

1
কেবলমাত্র একটি এফওয়াইআই: আপনি অন্যান্য পূর্ণসংখ্যার আকারের জন্য মেমসেট_প্যাটার্ন 4, 8 এবং 16 ব্যবহার করতে পারেন।
geowar


5

জাভা 8 টি স্ট্রিমের মাধ্যমে এটিও সম্ভব:

int[] a = IntStream.generate(() -> value).limit(count).toArray();

সম্ভবত, কাজটি করার সবচেয়ে কার্যকর উপায় নয়।


এটি অ-আদিম ধরণের ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();) জন্যও কাজ করবে , সুতরাং অ্যারে.ফিল () এর চেয়ে আরও নমনীয়। দক্ষতার বিষয়ে নিশ্চিত না, যদিও আপনি বলেছেন।
ক্রিস্টোফার রিচস

3

এটি সংক্ষিপ্ত হলে আপনি এটি করতে পারেন:

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

তবে এটি মাত্র কয়েকজনের চেয়ে বেশি খারাপ হয়ে যায়।

সহজ একটি forলুপ হবে:

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

সম্পাদনা: Arrays.fill()অন্যান্য লোকেরা উল্লিখিত বিকল্পটিও আমি পছন্দ করি ।


দ্বি-মাত্রিক অ্যারে শুরু করার কোনও বিধান আছে কি? int এর মতো কিছু [] [] = নতুন অন্তর্ [3] [4]; Arrays.fill (ক, -1); যাতে সমস্ত 12 টি উপাদান -1 দিয়ে সেট করা থাকে।
পূর্নাচন্দ্র


1

আপনি কি অ্যারে.ফিল ফাংশনটি চেষ্টা করেছেন ?


নাঃ। আমি আগে এটি ব্যবহার করিনি।
রবি জোশী

আপনি দয়া করে এটির উদাহরণস্বরূপ কীভাবে দেখতে পারেন তা দিতে পারেন?
এনাডন

@ এনাডন: গৃহীত উত্তরটি দেখুন যা অ্যারে.ফিল ফাংশনটি দেখায়।
স্যাম গোল্ডবার্গ

0

আপনি ব্যবহার করতে পারেন Arrays.fill(array, -1)


0

স্পষ্টতই আপনি অ্যারে.ফিল () ব্যবহার করতে পারেন, আপনি এটি যেভাবে করেছেন তা যদিও কার্যকর হয়।


ইয়া। এমনকি সূচক সহ Arrays.fill()একটি forলুপ ব্যবহার 0করে size-1। একইভাবে, আমি কি করেছি। আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ।
রবি জোশী

0

জাভা 8 ব্যবহার করে, আপনি কেবল ব্যবহার করতে পারেন ncopiesএর Collectionsশ্রেণী:

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

আপনার ক্ষেত্রে এটি হবে:

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

আপনার অনুরূপ মামলার বিস্তারিত উত্তর এখানে দেওয়া হল।


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