2014-11-23 46 views
0

我想切換2d字符數組中的兩個元素,但它不工作。我讀過其他類似的問題,temp變量應該是1d數組,但我不相信這是真的。任何人都可以幫助我理解爲什麼這不起作用?二維數組中的Java開關字符元素

public static void moveTo(char[][] tissue, int i, int j){ 
    char temp = tissue[i][j]; 

    for(int k = 0; k < tissue.length; k++){ 
     for(int l=0; l<tissue.length; l++){ 
      if(tissue[k][l] == ' '){ 
       tissue[k][l] = tissue[i][j]; 
       tissue[k][l] = temp; 
       return; 
      } 
     } 
    } 
} 
+3

爲什麼你用'tissue [i] [j]'中的字符替換''''兩次? **這應該做什麼**? – 2014-11-23 17:11:29

+0

您可能需要在此處提供更多詳細信息。你的代碼似乎有幾個缺陷。但是實際上錯誤取決於它應該做什麼。 – 2014-11-23 17:14:44

+0

'temp'和'tissue [i] [j]'包含相同的值。因此,在'if()'塊內沒有交換。 – hfontanez 2014-11-23 17:33:28

回答

3

在第二個循環中,您必須使用tissue[k].length

tissue[i][j]必須受空白字符影響(如果我理解的很好)。 temp是無用的。

public static void moveTo(char[][] tissue, int i, int j){  
    for(int k = 0; k < tissue.length; k++){ 
     for(int l=0; l<tissue[k].length; l++){ 
      if(tissue[k][l] == ' '){ 
       tissue[k][l] = tissue[i][j]; 
       tissue[i][j] = ' '; 
       return; 
      } 
     } 
    } 
} 
+0

這很有道理。謝謝! – user3412722 2014-11-23 19:21:01

0

我認爲你正在尋找這個。

public static void moveTo(char[][] tissue, int i, int j){ 
    for(int k = 0; k < tissue.length; k++){ 
     for(int l=0; l<tissue.length; l++){ 
      if(tissue[k][l] == ' '){ 
       char temp = tissue[i][j]; 
       tissue[i][j] = tissue[k][l]; 
       tissue[k][l] = temp; 
       return; 
      } 
     } 
    } 
} 

,將搜索2D陣列用於' '第一次出現,並且在i,j位置互換其與元素含量。

您正在存儲temp,因爲您將很快覆蓋tissue[i][j]中的值,但之後需要將其存儲在tissue[k][l]中。在這種情況下,您不會真的需要temp,因爲您知道tissue[k][l]總是' '。所以你可以先覆蓋它,而不需要存儲它,就像在其他答案中一樣。

+0

這與@ToYonos答案相同,只是使用'temp'變量而不是'char'文字。 – hfontanez 2014-11-23 17:31:24

0

此答案主要基於問題的標題。如果您提供更多信息,我們可能會提供更多幫助。

代碼中有幾個小問題導致它無法正常工作。首先,無論您何時循環使用多維數組,您都需要確保內部循環使用正確的限制。 tissue.length指的是外部數組的長度,但不能保證2d數組中的每個內部數組(即tissue[0].length返回數組的長度,並且tissue[1].length可能會返回不同的值)。所以我們首先用tissue[k].length替換內部環路限制器。

for(int k = 0; k < tissue.length ; k++){ 
    for(int l = 0 ; l < tissue[k].length ; l++){ 
     if(tissue[k][l] == ' '){ 
      tissue[k][l] = tissue[i][j]; 
      tissue[k][l] = temp; 
      return; 
     } 
    } 
} 

下一期我看到的是交換。您實際上的代碼會查找任何數組中的第一個空格,並在i,j處插入值,但不要將任何內容放入索引i,j。埃利奧特提到的是,if語句中的兩行代替tissue[k][l]具有相同的值,存儲在tissue[i][j]。相反,我們會將第一行更改爲tissue[i][j] = tissue[k][l]以執行交換。所以我們最終使用下面的方法將第一個字符串中的第一個空格字符替換爲i,j處的字符。

public static void moveTo(char[][] tissue, int i, int j){ 
    char temp = tissue[i][j]; 

    for(int k = 0; k < tissue.length ; k++){ 
     for(int l = 0 ; l < tissue[k].length ; l++){ 
      if(tissue[k][l] == ' '){ 
       tissue[i][j] = tissue[k][l]; 
       tissue[k][l] = temp; 
       return; 
      } 
     } 
    } 
}