2014-11-23 43 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; 
      } 
     } 
    } 
}