2011-10-29 58 views
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方法工作正常。我正努力從bubbles()方法中獲取tempArray。如果我將輸出設置爲tempArray,它將僅返回爲原始數組右下角計算的5個值。

我打過電話,以便完成所有的處理存在,並返回一個新的數組其他方法進入氣泡()方法:

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

任何幫助,將不勝感激。(我甚至會參考你,如果我需要使用一些代碼,您提供的;)

回答

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

排序被取出,我還沒有用它回來測試;但到目前爲止,這爲temp數組中的所有單元提供了新的值。

0

的主要問題,我看到的,是通過你的內部循環每個遍歷:

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中的特定索引,而不是重置其每個值。

+0

感謝您的快速響應。我一直在嘗試這個,現在拋出一個ArrayIndexOutOfBoundsException 298.在我的方法中,我已經拖延了數組[298] [298],所以爲什麼它應該超出我不確定的範圍。 –