【问题标题】:Array diagonal neighbourhood analysis and sort数组对角邻域分析和排序
【发布时间】:2011-10-29 10:50:36
【问题描述】:

我已经为此奋斗了一段时间,但似乎无济于事。设置是这样的;我有一个二维数组。对于这个数组,我需要遍历每个值并返回对角线邻居(5 个值)。这些邻居将被放入一个新的 1D [5] 数组并进行冒泡排序。然后将返回中间值(中位数)并将其放入新的中位数数组中。

到目前为止,我有提取对角线邻居的方法:

    //get diagonals from original DEM

    double [] getDiagonals(int i, int j) {

        double [] tempArray = new double [5];

        tempArray[0] = data[i -1][j +1];
        tempArray[1] = data[i -1][j -1];
        tempArray[2] = data[i][j];
        tempArray[3] = data[i +1][j -1];
        tempArray[4] = data[i +1][j +1];


        return tempArray;
    }

然后我在迭代中使用此方法来获取原始数组中每个值的对角线:

        //get diagonals for each 

    double [] []   bubbles(){

        double [] [] datap = new double [298] [298];

        for (int i = 1; i < data.length; i++){
            for (int j = 1; j < data[i].length; j++) {
                if ((i > 0) && (j > 0)) {
                    if ((i < data.length-1) && (j  < data.length-1)){

                         double [] tempArray = getDiagonals(i, j);
//do something with the tempArray

我认为这就是我要解决的问题。通过测试 getDiagonals 方法可以正常工作。我正在努力将 tempArray 从 bubbles() 方法中取出。如果我将输出设置为 tempArray,它只返回为原始数组的右下角计算的 5 个值。

我尝试在 bubbles() 方法中调用其他方法,以便在那里进行所有处理并返回一个新数组:

    //get diagonals for each 

    double [] []   bubbles(){

        double [] [] datap = new double [298] [298];

        for (int i = 1; i < data.length; i++){
            for (int j = 1; j < data[i].length; j++) {
                if ((i > 0) && (j > 0)) {
                    if ((i < data.length-1) && (j  < data.length-1)){

                         double [] tempArray = getDiagonals(i, j);
                         double sorted [] = sort(tempArray);
                         double median = sorted[2];


                            for (int z = 0; z < datap.length; z++){
                                for (int y = 0; y < datap[z].length; y++){
                                datap[z][y] = median;
                                }
                            }   



                    }
                }   
            }
        }
        return datap;
    }

再次失败,输出 datap 只是零。上面的 sort() 方法将对角线传递给冒泡排序方法(我知道它适用于它的

我想我的问题是如何在迭代和填充新数组的方法中进行处理?

我希望这是有道理的,但如果您需要更多详细信息,请告诉我。是的,我使用的排序是冒泡排序。我知道它们很垃圾,但这是针对我正在做的一门课程,所以必须使用它。是的,我对 java 还是很陌生。

任何帮助将不胜感激(如果我需要使用您提供的一些代码,我什至会参考您;)

【问题讨论】:

    标签: java bubble-sort auto-populate neighbours


    【解决方案1】:

    我看到的主要问题是,每次遍历你的内部循环:

    for (int i = 1; i < data.length; i++){             
       for (int j = 1; j < data[i].length; j++) {
    

    你打电话的地方:

    double [] tempArray = getDiagonals(i, j);
    

    您正在将datap所有值重置为当前计算的median。要解决此问题,您需要某种方法来仅指示要填充的特定 datap 值的索引。

    您需要替换这部分代码:

    for (int z = 0; z < datap.length; z++){
        for (int y = 0; y < datap[z].length; y++){
        datap[z][y] = median;
        }
    }   
    

    您可以在方法顶部声明int y, z 并执行以下操作:

    if (y < datap.length){
        if (z == datap.length[y] - 1){
            y++;
            z = 0;
        }
    
        datap[y][z] = median;
        z++;
    }
    

    这样,您只需分配给您尝试访问的 datap 中的特定索引,而不是重置其每个值。

    【讨论】:

    • 感谢您的快速响应。我一直在尝试这个,现在抛出一个 ArrayIndexOutOfBoundsException 298。在我的方法中,我已将数组声明为 [298][298],所以我不确定为什么它应该越界。
    【解决方案2】:

    终于破解了。为了填充整个数组,下面的代码可以正常工作。

    //Diagonal to 1dArray and sorting
    
    double [] [] bubbles()
    {
        double [][] tempArray = new double [300][300];
    
        int y = 0;
        int z = 0;
        double median = 0;
    
        for (int i = 0; i < data.length; i++)
        {
            for (int j = 0; j < data[i].length; j++)
            {
                if ((i > 0) && (j > 0))
                {
                    if ((i +1 < data[i].length) && (j +1 < data[j].length))
                    {
                        double [] diagonals = getDiagonals(i, j);
    
                        //Need to sort here
                        median = diagonals[2];
                        tempArray[i][j] = median;
                    }
                }
            }
        }
        return tempArray;
    }
    

    排序已取出,我还没有重新测试;但到目前为止,这为临时数组中的所有单元格提供了新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2019-11-20
      • 2021-03-30
      相关资源
      最近更新 更多