Java 3打印时从一列中进行加减

Java 3打印时从一列中进行加减,java,sorting,multidimensional-array,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

所以我把这个问题作为家庭作业,我应该接受一个二维数组的输入,然后只对外部边界进行排序,然后打印排序后的数组。我做了这个程序,它对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];
intboundnum=(2*m)+2*(n-2);
int-bounds[]=新的int[boundnum];
i=0;
对于(j=0;j界限[j+1])
{
int-temp=边界[j];
界[j]=界[j+1];
界限[j+1]=温度;
}
i=0;
对于(j=0;j=0;j--,i++)
a[m-1][j]=界[i];
对于(j=m-2;j>0;j--,i++)
a[j][0]=界[i];

任何帮助都将不胜感激。谢谢

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

    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];
for(i=0,j=0;i=0;i--,j++)//填充行m-1,列n-2到1
a[m-1][i]=界[j];
对于(i=m-2;i>=1;i--,j++)//行m-2到1,列0
a[i][0]=界[j];

使用调试器,这就是调试器的作用……我认为您应该练习调试自己的代码。在开始时尝试使用不同的测试示例,并逐个检查每个循环。编写代码没有捷径,每个元素都应该自己测试和理解:)。当然,您可以尝试调试程序并设置一些断点。保持going@Dominik我通常可以调试我所有的代码和我朋友的代码,但这次我不知道出了什么问题。这是我把它放在这里的唯一原因:)另外,让我感到困惑的是,除了循环冒泡排序(目前不寻找效率)之外,我没有任何东西可以远程修改值,但是获取数组的边界仍然是个问题。确保你的代码没有添加任何东西——相反,你只是在其中一个循环中取4和11两次。对于较小的阵列,即使存在bug,它也可以工作。bug并不是出现在每个测试用例中。否则它就不会是一个bug。