打印

时间:2016-01-08 18:21:30

标签: java sorting multidimensional-array

所以我把这个问题作为家庭作业,我应该采取二维数组输入,然后只排序外边界并打印排序的数组。我制作了程序,它适用于3 * 3和2 * 3矩阵,但是当我输入这个特定的4 * 4数组时,两个数字被加上/减去3。

不知何故,4和11出现而不是7和8,我不知道我做错了什么。我的代码部分涉及下面的排序和排列:

int boundnum = (2 * m) + 2 * (n - 2);
    int bounds[] = new int[boundnum];

    i = 0;

    for(j = 0; j < m; j++, i++)
        bounds[i] = a[j][0];
    for(j = 0; j < m; j++, i++)
        bounds[i] = a[j][n - 1];
    for(j = 1; j < n - 1; j++, i++)
        bounds[i] = a[0][j];
    for(j = 1; j < n - 1; j++, i++)
        bounds[i] = a[m - 1][j];

    for(i = 0; i < boundnum; i++)
        for(j = 0; j < boundnum - 1; j++)
            if(bounds[j] > bounds[j+ 1])
            {
                int temp = bounds[j];
                bounds[j] = bounds[j + 1];
                bounds[j + 1] = temp;
            }

    i = 0;

    for(j = 0; j < n; j++, i++)
        a[0][j] = bounds[i];
    for(j = 1; j < m - 1; j++, i++)
        a[n - 1][j] = bounds[i];
    for(j = n - 1; j >= 0; j--, i++)
        a[m - 1][j] = bounds[i];
    for(j = m - 2; j > 0; j--, i++)
        a[j][0] = bounds[i];

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

确实是循环条件错了。在某些地方,行和列互换。正确的解决方案是:

    for(i = 0, j = 0; i < n; i++, j++) //fill elements in row 0
        a[0][i] = bounds[j];
    for(i = 1; i < m - 1; i++, j++) //fill elements in column (n-1) from row 1 to m-2
        a[i][n - 1] = bounds[j];
    for(i = n - 1; i >= 0; i--, j++) //fill row m-1, columns n-2 to 1
        a[m - 1][i] = bounds[j];
    for(i = m - 2; i >= 1; i--, j++) //row m-2 to 1, column 0
        a[i][0] = bounds[j];