1

私はしばらくの間これと戦ってきました、そしてどこにも行かないようです。セットアップはそうです。2Dアレイがあります。この配列では、各値を反復処理して、対角線の近傍(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にかなり慣れていません。

任意の助けをいただければ幸いです(そして、あなたが提供するコードを使用する必要がある場合は、あなたを参照することもできます;)

4

2 に答える 2

0

最後にそれを割った。配列全体にデータを入力するには、次のコードを実行します。

//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;
}

並べ替えは削除されましたが、まだテストしていません。ただし、これまでのところ、一時配列内のすべてのセルに新しい値が提供されています。

于 2011-11-01T13:33:11.870 に答える
0

私が見る主な問題は、次の内部ループを通過するたびに次のようになることです。

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

電話をかける場所:

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

のすべての値をdatap現在の計算された にリセットしていますmediandatap修正するには、入力する特定の値のインデックスのみを示す何らかの方法が必要です。

コードのこのセクションを置き換える必要があります。

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そうすれば、各値をリセットするのではなく、到達しようとしている特定のインデックスにのみ割り当てることができます。

于 2011-10-29T12:07:48.070 に答える