الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حساب عدد تكرار عناصر المصفوفة

بدأه المشاكـس5550 في 17 نوفمبر 2012 · 9 رد · 6,885 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اهلا

واجهت مشكلة في معرفة عدد التكرار لكل عنصر موجود بالمصفوفة

int array[] = {0, 15, 0, 6,1,15,7, 0, 04};
for(int i=0; i<array.length; i++){
for(int i2=0; i2<array.length;i2++){
if(array[i2] == array[i2+1]){
int count++;
}
}
}

أرجو المساعدة

556891961.gif

I am learning from you

it is the programmer eye

#2

يُمكنك كتابة دالة تتحق من تكرار عنصر واحد داخل المصفوفة ثم تقوم بعمل for مثلا و في كل مرة تُمرر للدالة الخانة رقم i من المصفوفة.

الدالة ستكون هكذا :

public class NewClass {

    public static int repeatCount(int arr[], int elem, int length) {
        int count = 0;
        for (int i = 0; i < length; i++) {
            if (arr == elem) {
                count++;
            }
        }
        return (count == 0 ? 0 : count);
    }

    public static void main(String args[]) {
        int array[] = {0, 15, 0, 6, 1, 15, 7, 0, 04};
        int num = array[0x1];
        System.out.println("Le nombre d'apparition de " + num + " égal " + repeatCount(array, num, 9));
    }
}

أو يُمكنك استخدام الــ HashMap إن أردت:

import java.util.HashMap;
import java.util.Map;

public class NewClass {

    public static void main(String[] args) {
        // Tableau à compter
        final String[] tab = {"0", "15", "0", "6", "1", "15", "7", "0", "04"};

        // Comptage
        Map<String, int[]> map = new HashMap<String, int[]>();
        for (String item : tab) {
            int[] nombre = map.get(item);
            if (nombre == null) {
                nombre = new int[]{0};
                map.put(item, nombre);
            }
            nombre[0]++;
        }

        // Affichage
        for (String key : map.keySet()) {
            int[] nombre = map.get(key);
            System.out.println("[" + key + "] --> " + nombre[0]);
        }
    }
}

تحياتي.

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 17 نوفمبر 2012 في 16:12

2
#3

شكر كثيييير اخوي Sn@CkeR

:happy:

الله يسلم ايديك :)

556891961.gif

I am learning from you

it is the programmer eye

#4

+1

لم أتمكن من اضافتها مسبقا

شكرا مرة أخرى :happy:

556891961.gif

I am learning from you

it is the programmer eye

#5

السلام عليكم

مرحباً بك عزيزي المشاكس مجدداً , هلا تكرمت علينا بمعرفة اسمك أخي المشاكس الكريم smile.gif

أنت تسأل عن سبب المشكلة في الكود الذي كتبته أولاً أنت قمت بإستخدام متغير قبل تعريفه وهو :

int count++;

- لأن هذه الصيغة هي :

int count = count +1;

- وهي عبارة عن استخدام متغير معرف قبل هذا , ولهذا لا يصلح تعريف المتغيرات المضافه إليها المؤثرات الحسابية مباشراً .

ثانياً : بما أنك ستقوم بإستخدام عداد للجمع فيجب تعريفه خارج نطاق الدوران وإعطاءه القيمة الإبتدائية 0 .

ثالثاً : أنت تضع عداد الحلقة الداخلية من 0 إلى أصغر من عدد عناصر المصفوفة كلام سليم ولكن تقوم بزيادة 1 لعملية المقارنة وبالتالي عند الوصول لأخر عنصر في المصفوفة سيحدث خطأ لتخطي الـindex للمصفوفة في عملية المساواه .

وفي النهاية أنت تريد إستخراج عدد التكرارت لكل عنصر من عناصر المصفوفة وبالتالي ما تحتاجه هو إزالة العدد 1 المضاف عند عملية المساواة لمساواة كل عنصر من عناصر الحلقة الخارجية بكل عناصر الحلقة الداخلية بمعنى مساواة كل عنصر من عناصر المصفوفة بجميع عناصر المصفوفة لمعرفة عدد التكرارات , ولكن لا تنسى طباعة عدد التكرارت لكل عنصر و تصفير العداد count بعد كل حلقه من حلقات الدوران الخارجي .

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#6

مشكور أحمد

اقتباس
مرحباً بك عزيزي المشاكس مجدداً , هلا تكرمت علينا بمعرفة اسمك أخي المشاكس الكريم

ناجي :lol:

556891961.gif

I am learning from you

it is the programmer eye

#7
اقتباس
ناجي laugh.gif
- شرُفنا لقائك أستاذ ناجي وناجين جميعاً إن شاء الله

- في إنتظار محاولت تعديل كودك لينفذ العملية بشكل جيد .

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#8

هلا فيك :lol:

556891961.gif

I am learning from you

it is the programmer eye

#9

السلام عليكم

وفيك , أين الحل ؟smile.gif

- عموماً هذا هو الحل بطريقتك ولكن أضفت حلقة أخرى لعدم تكرار كتابة النتائج :

int array[] = {0, 15, 0, 6,1,15,7, 04};
	int count = 0; 
	for(int i=0; i<array.length; i++){
    	for(int i2=0; i2<array.length;i2++){
        	if(array == array[i2]){
            	count++;
        	}
    	}
    	boolean isFound = false;
    	for(int j=i+1;j<array.length;j++){
        	if(array == array[j])
        	{
            	isFound = true;
            	break;
        	}
    	}
    	if(!isFound)
    	{
        	System.out.println(array+" Found "+count+" Times");
    	}
    	count = 0;
	}

- أخي محمد ألقيت نظرة على الكود الذي كتبته , ولكن ألا ترى أنه لا فائده من هذا الشرط :

(count == 0 ? 0 : count)

- ولماذا وضعت وسيط ثالث للداله مادام بإستطاعتنا حساب عدد عناصر المصفوفة بـlength .

دمتم في رعاية الله

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#10

مشكور احمد

انا ايضا لم افهم

(count == 0 ? 0 : count)

جيدا

:lol:

556891961.gif

I am learning from you

it is the programmer eye

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…