اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

يمكن استخدام الصنف Class ArrayUtils والدالة indexOf والتي تعيد دليل العنصر 

int[] arr = new int{4, 1, 7, 6, 34};

int inde_2 = ArrayUtils.indexOf(arr, 2);

لاحظ أن الدالة تأخذ المصفوفة كوسيط أول ثم قيمة العنصر الذي نبحث عنه كوسيط ثاني..

وتعيد -1 في حال لم يكن موجود، 

if ( inde_2 != -1 ) {
	System.out.println("number 2 is here")
}else {
	System.out.println("not here")
}

إن كنت تريد عمل بحث سريع ضمن مصفوفة عددية كبيرة الحجم مثلا،  أي لعدد كبير من العناصر وربما عدد كبير من الاستعلامات (عمليات البحث) يمكن استخدام دالة البحث الثنائي

Arrays.sort(array);
Arrays.binarySearch(array, value);

ولكن تأكد من ترتريب المصفوفة قبل عمل البحث الثنائي.

ولكي تستخدم طريقة بسيطة، بحث باستخدام الحلقة يمكن عمل التالي:

public int find(int[] array, int value) {
    for(int i=0; i<array.length; i++) 
         if(array[i] == value)
             return i;
  return -1;
}

هذه الدالة تكافئ عمل الدالة indexOf،

إن كنت مهتماً فقط بالتحقق من وجد عنصر أو عدمه، حوّل الدالة لدالة منطقية boolean تعيد true بدل return i و fasle افتراضيا.

 

  • 0
نشر

يمكنك البحث عن العناصر ضمن المصفوفات باستخدام عدة طرق: أولاً من خلال خوارزمية ال Binary Search حيث يمكننا استخدام الدالة الجاهزة Arrays.binarySearch للقيام بعملية البحث عن عنصر ما داخل مصفوفة. الكود التالي هو تطبيق لكيفية استخدامها:

import java.util.stream.IntStream;
import java.util.Arrays;
class check {
    // نعرف تابع لتغليف عملية البحث
	private static void checkit(int[] array, int value)
	{
        // نقوم بفرز المصفوفة
		Arrays.sort(array);
        // نستخدم خوارزمية البحث الثنائي لاختبار وجود العنصر ضمن المصفوفة
		int res = Arrays.binarySearch(arr, value);
		boolean bool = res > 0 ? true : false;
        //True في حالة كان موجود سيطبع 
		System.out.println(bool);
	}
    // الآن سنستخدمه ضمن البرنامج الرئيسي
	public static void main(String[] args)
	{

		// نعرف مصفوفة
		int myarray[] = {1, 4, 9, 0};
		// تحديد القيمة التي نريد البحث عنها
		int val = 4;
		// استخدام التابع
		checkit(arr, val); // True
	}
}

هذه الطريقة هي الأفضل والأكثر فعالية لأن تعقيدها هو الأقل. هناك طرق أخرى مثلاً استخدام List.contains أو خوارزمية البحث الخطي لكن هذه الطرق أقل كفاءة من هذه الطريقة، وبكافة الأحوال سأكتب لك التابعين التاليين إذا رغبت باستخدامهما. أولاً استخدام List.contains :

    private static void check(Integer[] arr, int val)
    {
        boolean bool = Arrays.asList(arr).contains(val);
        System.out.println(bool);
    }

ثانياً البحث الخطي:

private static void check(int[] arr, int val)
    {
        boolean b = false;
        for (int element : arr) {
            if (element == val) {
                test = true;
                break;
            }
        }
        System.out.println(b);
    }

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...