دادن متغییر تصادفی به آرایه دو بعدی که حتما بدون تکرار باشد

سلام تو این برنامه میخوام متغییز تصادفی بدون تکرار به یه ارایه دو بعدی بدم و اعداد از نوع int باشند: 

package thegame;
public class TheGame {

    public static void main(String[] args) {
        System.out.println("Hello: ");
        
        int a[][] = new int[3][3];
       refill(a);
       print(a);
       
    }

public static
         int[][] refill (int a[][]){
             
//int a[][]= new int[3][3];;
for(int i=0;i<3;i++){
    for (int j=0;j<3;j++){
        a[i][j]=(int)(Math.random()*10);       
        }
    }

for(int i=0;i<3;i++){
    for (int j=0;j<3;j++){
        int w=i,e=j;
      if (a[i][j]==a[i-w][j-e]){
        a[i][j]=(int)(Math.random()*10);
        e--;
        }
      w--;
    }
}
return a;    
}
public static void print(int a[][]){
    for(int i=0;i<3;i++){
       
    for (int j=0;j<3;j++){
         
        System.out.print(" ["+a[i][j]+"] ");
    }
     System.out.println();
    }
}
}





 

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 8 سال پیش

سلام داخل سورستون تابع refill  را می توانید بهتر بنویسید...

مثلا اگر از arraylist  استفاده کنید همچین روشی برید

ArrayList numbers = new ArrayList();

while(numbers.size() < 6) {
    int random = numGen(); //this is your method to return a random int

    if(!numbers.contains(random))
        numbers.add(random);
}

خوب اگه می خواهید از اریه استفاده کنید. می توانید همچین روشی برید

  int[] numbers = new int[6];

    for (int i = 0; i < numbers.length; i++) {
        int random = 0;

        /*
         * This line executes an empty while until numGen returns a number
         * that is not in the array numbers yet, and assigns it to random
         */
        while (contains(numbers, random = numGen()))
            ;


        numbers[i] = random;
    }

که  قسمت اون کامنتش باید همچین متدی بذارید 

private static boolean contains(int[] numbers, int num) {
    for (int i = 0; i < numbers.length; i++) {
        if (numbers[i] == num) {
            return true;
        }
    }
    return false;
}

که این دو روش سعی دارن دقیقا همان لحظه پرکردن چک کنه تکراری نباشه ولی روش شما بعد از کامل پر کردن چک می کند....

یک مدل دیگه برای حل ان می توانی روش بازگشتی پیاده کنی

تقریبا یک همچین مدلی

public static int numGen(int Array[])
{

    int random = (int)(1+Math.random()*6);

    for(int loop = 0; loop <Array.length ; loop++)
    {
        if(Array[loop] == random)
        {
            return numGen(Array);
        } 
    }


    return random;
}

که این روش ها کلی بودند باید برای ارایه دوبعدی خودوتن  ستش کنید.

sokanacademy forum
کاربر سکان آکادمی 6 سال پیش

سلام وقت بخیر

تولید متغیر تصادفی کار ساده ای هست ولی اگر این اعداد برای شما صرفا تصادفی بودنشون مهم هست کافیه با استفاده از تابع زمان تایم سیستم دریافت کرده و در آرایه تون ذخیره کنید

online-support-icon