2015-08-22 48 views
0

我想寫一個方法,將採取一個二維數組作爲輸入,並返回一個新的二維數組,其中所有的零都從陣列。如何使while循環正確工作,以糾正給定的二維數組

另外,如果存在具有等於所述第二陣列的長度的值的第一陣列中的元素,那麼它應該被移除,並且第二陣列中的所有元件將由1.

中減去對於第二個陣列也應該重複上述過程。

這是我爲代碼實現編寫的代碼,但代碼陷入了循環,我認爲它沒有做它應該做的事情。

注意:當ArrayUtils被調用時,在Apache Lang庫正在被使用,而這是2D陣列I輸入:

[[0, 0, 2, 2, 3, 4], [0, 0, 2, 2, 3, 4]] 

代碼:

public static int[][] removeTrivialCases(int[][] startingSums) { 
    int[][] correctedSums = startingSums; 

    int counter = 0; 

    int numRows = correctedSums[0].length; 
    int numCols = correctedSums[1].length; 

    boolean zeroesExist = true; 
    boolean valueEqualsDimension = true; 

    boolean trivialCasesRemain = true; 

    while(trivialCasesRemain) { 
     for (int i = 0; i < correctedSums.length; i++) { 
      for (int j = 0; j < correctedSums[i].length; j++) { 
       if (correctedSums[i][j] == 0) { 
        trivialCasesRemain = true; 
        correctedSums[i] = ArrayUtils.removeElement(correctedSums[i], j); 
       } 

       for (int h = 0; h < correctedSums[i].length; h++) { 
        if (correctedSums[i][h] == 0) { 
         zeroesExist = true; 
        } 
       } 

      } 
     } 

     for (int i = 0; i < correctedSums[0].length; i++) { 
      if (correctedSums[0][i] == numCols) { 
       trivialCasesRemain = true; 
       correctedSums[0] = ArrayUtils.removeElement(correctedSums[0], i); 
       for (int j = 0; j < correctedSums[0].length; j++) { 
        correctedSums[0][j]--; 
       } 

       valueEqualsDimension = false; 

       for (int h = 0; h < correctedSums[0].length; h++) { 
        if (correctedSums[0][h] == numCols) { 
         valueEqualsDimension = true; 
        } 
       } 
      } 
     } 

     for (int i = 0; i < correctedSums[1].length; i++) { 
      if (correctedSums[1][i] == numRows) { 
       trivialCasesRemain = true; 
       correctedSums[1] = ArrayUtils.removeElement(correctedSums[1], i); 
       for (int j = 0; j < correctedSums[1].length; j++) { 
        correctedSums[1][j]--; 
       } 
      } 

      valueEqualsDimension = false; 

      for (int h = 0; h < correctedSums[1].length; i++) { 
       if (correctedSums[1][h] == numRows) { 
        valueEqualsDimension = true; 
       } 
      } 
     } 

     if (!zeroesExist || !valueEqualsDimension) { 
      trivialCasesRemain = false; 
     } 
    } 

    return correctedSums; 
} 
+2

請改善您的問題,1)以其非信息性標題開始,2)然後告訴我們您嘗試調試問題的結果,包括使用調試器運行您的代碼。 –

+0

關於您的「固定」標題,「有人可以幫我糾正代碼嗎?」,同樣,標題應該是*信息性的,可能是這樣的:爲什麼程序進入無限循環?你的標題不會告訴你自己的問題本身,只是你需要幫助修復程序 - 但我們都知道,否則你不會在這裏。您的標題應該以信息的方式總結您遇到的問題。 –

回答

2

關於,

但代碼陷入循環,我不認爲它正在做它應該做的事情。

這裏:

for (int h = 0; h < correctedSums[1].length; i++) { 

這個循環將永遠不會結束,因爲h永遠在循環中改變。它應該是:

for (int h = 0; h < correctedSums[1].length; h++) { 

如果你在調試運行的代碼,或使用的println的,你知道是什麼循環的代碼被卡住了,這將允許您立即檢查並改正它。

+0

我運行了代碼,但在此之後,它只從數組中刪除了第一個零。它沒有做我指定的其餘部分。 @Hovercraft Full Of Eels – Chromatica

+0

@Chromatica:那麼你有一個新的單獨的問題,仍然需要進行調試。 –