我正准备参加考试,我们可能会负责对二维数组进行排序。排序表示第一行,第一列是最低行,最后一列是最高行。
我通过创建一维数组来完成任务,然后使用二维数组中的所有值填充它。然后,我通过排序方法传递它。最后,我将已排序数组的每个值写回到2d数组并返回它。
从下面的输出中可以看出,这种方法很有效。我很困惑我的流程在哪里崩溃,我将不胜感激。
输入:
int [] [] nums = {{1,5,9},{8,9,3},{0,7,6}};
输出:
0 0 0
0 0 0
0 0 1
public int[][] sort2D(int[][]nums){
int[] temp = new int[((nums.length+1)*(nums.length+1))];//make one long array
for(int i =0; i<nums.length; i++){ //populate
int counter = 0; //indices for long array
for(int j = 0; j<nums[i].length; j++){
System.out.println(temp[counter]);
temp[counter] = (int)nums[i][j];
counter++;
}
}
temp = sort(temp); //sort it (verified code)
for(int i = 0; i<nums.length; i++){ //reverse the above process
int counter = 0;
for(int j = 0; j<nums.length; j++){
nums[i][j] = temp[counter];
counter++;
}
}
return nums;
}
答案 0 :(得分:0)
我认为你做错的第一件事是:
int[] temp = new int[((nums.length+1)*(nums.length+1))];//make one long array
在您的情况下,nums.length +1 = 4。您正在将3 * 3阵列复制到4 * 4阵列中。 这有一个有趣的效果,即为你的结果添加5 0。 (temp [9]到temp [15]将被填0) 排序后,这些0将显示
您的代码出现故障的地方是:
for(int i =0; i<nums.length; i++){ //populate
>> int counter = 0; //indices for long array
for(int j = 0; j<nums[i].length; j++){
System.out.println(temp[counter]);
temp[counter] = (int)nums[i][j];
counter++;
}
}
每次通过其中一个外部数组时,都会将计数器初始化为0。 这意味着在第3遍(最后一个数组)上用nums [2] [0]覆盖temp [0],temp 1和temp [2],nums 2,nums [2] [ 2]
我假设您的实际代码中有
int counter = 0; //indices for long array
for(int i =0; i<nums.length; i++){ //populate
for(int j = 0; j<nums[i].length; j++){
System.out.println(temp[counter]);
temp[counter++] = (int)nums[i][j];
}
}
你也可以使用System.arrayCopy,特别是如果你知道长度等等。