我正在尝试制作一个程序,在整个数组中按升序打印出一个2维数组。数组中的任何元素都不能在数组中的任何位置重复。您需要做的任何事情才能使其发挥作用。非常感谢。
08 11 14 19 21 22 25
15 22 25 28 32 37 41
20 28 31 32 39 40 48
24 34 41 47 53 54 56
28 37 47 50 57 60 66
29 38 50 57 64 70 71
31 43 52 62 65 75 78
它与followint代码相关但未排序:
public static int[][] getRandomSorted2DArray(int size)
{
int bigger = (int)Math.pow(2, size) + 1;
int[][] data = new int[bigger][bigger];
for (int i = 0; i < data.length; i++)
{
for (int j = 0; j < data[0].length; j++)
{
data[i][j] = new java.util.Random().nextInt(90);
}
}
return data;
}
我再次需要这个程序的帮助,但需要两件事 1.按升序对整个数组进行排序 2.不要重复任何其他元素。
答案 0 :(得分:0)
您可以通过使每个元素至少比最后一个元素大1来生成排序数组:
跟踪最后一个断言值,而不是完全随机的数字,选择lastValue
和99 - valuesToGo
之间的随机数(因此下一个数字仍有空间。
也许这有效:
public static int[][] getRandomSorted2DArray(int size)
{
int bigger = (int)Math.pow(2, size) + 1;
int[][] data = new int[bigger][bigger];
lastValue = 0;
valuesToGo = data.length * data[0].length;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[0].length; j++) {
data[i][j] = lastValue + 1 + new java.util.Random().nextInt(99 - 1 - lastValue - valuesToGo);
lastValue = data[i][j];
}
}
return data;
}
值可能会在100左右分布,但我想如果你愿意,你可以自己解决这个问题。