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

سؤالي حول خلق جدول من الارقام العشوائة

بدأه Jdawn في 6 يوليو 2011 · 7 رد · 467 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت ببرمجة لعبة بسيطة

عبارة عن Puzzel تتكون من تسعة خانات

و سؤالي حول خلق جدول من الارقام العشوائة يتكون من تمانية ارقام دون تكرار

لكي توضع اجزء الصورة بشكل عشوائي

وقد حاولت استخدام الطريقة Math.randomو الفئة random

لكن بدون نتيجة لانهما يعطيان رقم عشوائى واحد

#2
اقتباس
و سؤالي حول خلق جدول من الارقام العشوائة يتكون من تمانية ارقام دون تكرار

Random r =new Random();
int i = r.nextInt(7);
int s =0;
if(s != r){
s = r;
}

طبعا تحتاج إلى تكرار .. أنا فقط وضحت كيفية الحصول على رقم عشوائي من 0 إلى 7 باستخدام الفئة Random

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 6 يوليو 2011 في 19:10

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#3

شكرا لك لكن لم تعمل :sad:

وقد قمت بتجرب ..... بدون جدى :wacko:

import java.util.Random;


public class A {
	public boolean InTable(int[] t,int I){
		boolean B=true;
		for(int i=0;i<t.length;i++){
			if(t==I){

B=false;				
			}
		}
		return B;
	}
	void aff(int[] t){
		for(int i=0;i<t.length;i++){
			System.out.println(t );
		}

	}
public static void main(String[] args) {
	Random r =new Random();
	A a=new A();
	int ii;
	int[] t=new int[8];
	int i=0;
	while(i<t.length){
	ii = r.nextInt(8);

	if(!a.InTable(t,ii)){
	t = ii;
	i++;
	}
	}
	a.aff(t);
}

}

تم تعديل هذه المشاركة بواسطة Jdawn في 6 يوليو 2011 في 23:24

#4

لم أطلع على كامل الكود..

أخي الكريم الدالة الآتية ستعود بنفس القيمة على كل الأحوال!!

     public boolean InTable(int[] t,int I){
                boolean B=true;
                for(int i=0;i<t.length;i++){
                        if(t==I){

B=true;                         
                        }
                }
                return B;
        }

يجب عليك تعديل الشرط إلى :

 if(t==I){

B=false;                         
                        }

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#5
JavaPorgrammer كتب:

لم أطلع على كامل الكود..

أخي الكريم الدالة الآتية ستعود بنفس القيمة على كل الأحوال!!

     public boolean InTable(int[] t,int I){
                boolean B=true;
                for(int i=0;i<t.length;i++){
                        if(t==I){

B=true;                         
                        }
                }
                return B;
        }

يجب عليك تعديل الشرط إلى :

 if(t==I){

B=false;                         
                        }

ومع دلك اخي فانها لآ تعمل شكرا على كل حال

تم تعديل هذه المشاركة بواسطة Jdawn في 6 يوليو 2011 في 23:34

#6

عند البحث داخل المصفوفه يفضل جعل القيمة الأساسية false .. واذا وجدت القيمة فاجعلها true ، هذا تعديل الدالة:

        public boolean InTable(int[] t,int I){
                boolean B=false;
                for(int i=0;i<t.length;i++){
                        if(t==I){

B=true;                                
                        }
                }
                return B;
        }

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

الحل اما بزياده الأرقام العشوائية في الدالة nextInt وجعلها 10 أو العدد الذي تريده .. واذا كان ذلك غير مقبول فالحل هو بتهئيه المصفوفة بقيم غير داخل في مجال بحثك ولتكن -1 ، لذلك ضع:

java.util.Arrays.fill(t, -1);

قبل البدء بالحلقة ، وسوف تمشى الأمور جيداً..

اضافه:

يمكنك استخدام دالة تقوم بتوليد الأرقام وترجعها لديك مرة واحدة، انظر للكود التالي :

// Generate Unique Random Number

import java.util.Random ;
import java.util.List ;
import java.util.ArrayList ;
import java.util.Set; 
import java.util.HashSet ;
import java.util.Arrays;

public class RandomDemo {

	public static void main(String[] args) {

		// using list
		Integer[] result = generateUniqueRandomNumber(0, 8, 9);
		for (int i=0; i<result.length; i++) {
			System.out.print(result + " ");
		}
		System.out.println();

		// using set
		result = generateUniqueRandomNumber2(0, 8, 9);
		for (int i=0; i<result.length; i++) {
			System.out.print(result + " ");
		}
		System.out.println();

		// using array
		int[] result2 = generateUniqueRandomNumber3(0,8,9);
		for (int i=0; i<result2.length; i++) {
			System.out.print(result2 + " ");
		}
		System.out.println();
	}

	public static Integer[] generateUniqueRandomNumber(int from, int to, int count) {
		Random rand = new Random();

		List<Integer> list = new ArrayList<Integer>(count);
		for (int i=0; i<count; ) {
			int rInt = rand.nextInt(to-from+1) + from ;

			if ( ! list.contains(rInt) ) {
				list.add(rInt);
				i++;
			}
		}

		Integer[] result = new Integer[list.size()];
		return list.toArray(result);
	}

	public static Integer[] generateUniqueRandomNumber2(int from, int to, int count) {
		Random rand = new Random();

		Set<Integer> set = new HashSet<Integer>(count);
		while ( set.size() != count ) {
			int rInt = rand.nextInt(to-from+1) + from ;
			set.add(rInt);
		}

		Integer[] result = new Integer[set.size()];
		return set.toArray(result);
	}

	public static int[] generateUniqueRandomNumber3(int from, int to, int count) {
		Random rand = new Random();
		int[] result = new int[count];
		Arrays.fill(result, -1);

		for (int i=0; i<count; ) {
			int rInt = rand.nextInt(to-from+1) + from ;

			if ( ! contain(result, rInt) ) {
				result = rInt ;
				i++;
			}
		}

		return result;
	}

	public static boolean contain(int[] array, int number) {
		for (int num: array) {
			if ( num == number ) 
				return true;
		}

		return false;
	}
}

يمكنك الاستفادة من أحدى الدوال الثلاثه وهي لنفس الوظيفة،،

بالتوفيق،

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 7 يوليو 2011 في 01:00

1

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#7

ربما يمكن لهذا المثال أن يفيدك.

#8

شكرا cljneophyte على المساعدة

شكرا عصام على الابداع

تحياتي لكل العضاء

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

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

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

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

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