【问题标题】:Why does my 2D array only omit some of the elements when sorted and omitted elements are also not sorted?为什么我的二维数组在排序时只省略了一些元素,而省略的元素也没有排序?
【发布时间】:2017-08-11 18:44:44
【问题描述】:
class Temp
{

    static void sort1(int x[][])           //sort 2d  array
    {
        int temp = 0;
        for(int i=0;i<x.length;i++)
        {
            for(int j=i;j<x[i].length;j++)
            {
                for(int k=i;k<x.length;k++)
                {
                    for(int l=j;l<x[k].length;l++)
                    {
                        if(x[i][j] > x[k][l])
                        {
                            temp = x[i][j];
                            x[i][j] = x[k][l];
                            x[k][l] = temp;
                        }                        
                    }
                }
            }
        }
        System.out.println(".....Sorted Array.....");
        for(int i=0;i<x.length;i++)
        {
            for(int j=i;j<x[i].length;j++)
            {
                System.out.print(x[i][j] + "  ");
            }
        }
    }


    public static void main(String... s)
    {
        sort1(new int[][] { 
            {12, 7, 65}, 
            {87, 1, 4, 5, 31}, 
            {9, 76} 
            });
    }
}

当我运行这个程序时,它给出的输出为

1 4 5 7 12 31 65

我希望是这样的

1 4 5 7 9 12 31 65 76 87.

我的代码有什么问题? 它缺少应该显示的结果。任何帮助或见解将不胜感激。

【问题讨论】:

  • 调试代码时发生了什么?
  • 在哪个特定的行号,在调试时,您是否观察到结果与您预期的结果不同?
  • 不要以为我们互相理解。从这里开始:vogella.com/tutorials/EclipseDebugging/article.html 如果你不使用 Eclipse,请在 Google 中搜索 [IDE NAME] debugging
  • 您有两个选择:获取带有内置调试器的 IDE(它们大部分都是免费的),或者使用笔和纸。更难,但绝对仍然可行。

标签: java arrays sorting multidimensional-array


【解决方案1】:

以下是我能发现的错误:

  1. 当您输出结果时,在内部循环中,您需要从 0 而不是 i 开始,因为您要处理数组的所有元素,而不仅仅是主对角线下方的一半

    for(int i=0;i<x.length;i++)
    {
        for(int j=0;j<x[i].length;j++)
        {
            System.out.print(x[i][j] + "  ");
        }
    }
    
  2. 与排序阶段的第二个循环相同:它必须以0开头,原因相同

    for(int j=0;j&lt;x[i].length;j++)

  3. 排序有问题。在一维的情况下,您将有两个循环,内部循环将以i 开头(其中i 是外部循环的索引)。在您的二维情况下,两个外环代表一维情况的唯一外环,两个内环代表一维情况的唯一内环。您的 2 个内部循环需要遍历行 i 的所有剩余元素直到最后(列 j 到最后),加上所有其余行(从 i+1 到最后的行,索引从 0 到最后的)。但相反,您遍历 j 中的元素以在 all 剩余行中持续,因此您错过了一些元素(它们位于 i 行中的 0j-1 之间的列中到最后一个)。

【讨论】:

  • 好的。非常感谢你,伙计!实际上,我做了一个一维数组程序,然后我做了这个二维数组排序程序。我把同样的逻辑放在二维数组程序上。
  • 我刚刚找到了为什么所有元素都没有打印出来。 for(int i=0;i&lt;x.length;i++) { for(int j=i;j&lt;x[i].length;j++) { System.out.print(x[i][j] + " "); } }
  • j=i 应替换为 j=1
  • 对不起,我是 StackOverflow 的新手。不知道如何缩进 cmets 等等。
猜你喜欢
  • 2019-04-07
  • 2010-12-18
  • 1970-01-01
  • 2019-07-20
  • 2020-10-31
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多