Java随机数生成二维数组,我想生成一个只有数字1-16且不重复的二维数组。
比如我能否用循环生成随机数组的方式方式生成{{7,8,9,10},{4,5,6,3},{2,1,11,15},{16,12,13,14}}
这样的数组。当找到这样的数组后停止循环,输出数组,求代码及思路。
不要这样玩,先生成有序数组,再随机打乱顺序。效率比较高
int[][] arr=new int[4][4];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j]=i*4+j+1;
System.out.print(arr[i][j]+" ");
}
}
System.out.println();
int[][] arr1=shullArrays(arr, 50);
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr1[i][j]+" ");
}
}
}
public static int[][] shullArrays(int[][] arr,int n){
int x=(int) Math.floor( Math.random()*4);
int y=(int) Math.floor( Math.random()*4);
int x1=(int) Math.floor( Math.random()*4);
int y1=(int) Math.floor( Math.random()*4);
int temp;
for (int i = 0; i < n; i++) {
temp=arr[x][y];
arr[x][y]=arr[x1][y1];
arr[x1][y1]=temp;
x=(int) Math.floor( Math.random()*4);
y=(int) Math.floor( Math.random()*4);
x1=(int) Math.floor( Math.random()*4);
y1=(int) Math.floor( Math.random()*4);
}
return arr;
}
生成一个只有数字1-16且不重复的二维数组
可以先生成一个1-16的列表
然后从这些数值中随机选出几个,再从剩下部分随机选出几个,一直持续到选完
就OK啦
了解,现在生成了二维数组,我想判断数组是否满足横行,数列和斜线之和为34才将数组输出。我这边试了,弹出Exception in thread "main" java.lang.StackOverflowError错误。我想用Java程序找出满足这个条件的数组,比如{{1,15,14,4},{12,6,7,9},{8,10,11,5},{13,3,2,16}}这样的数组,可行不?