hajjijo

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

hajjijo ۱۳۹۵/۰۳/۳۱ 41 زبان برنامه‌نویسی جاوا

سلام تو این برنامه میخوام متغییز تصادفی بدون تکرار به یه ارایه دو بعدی بدم و اعداد از نوع 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();
}
}
}






 

پاسخ‌ها به این تاپیک
stack programer
stack programer
۱۳۹۵/۰۴/۰۲

سلام داخل سورستون تابع 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;
}

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