Java切换2d数组中的char元素

时间:2014-11-23 17:08:50

标签: java arrays multidimensional-array character-arrays

我正在尝试在2d char数组中切换两个元素,但它无法正常工作。我已经读过其他类似的问题,临时变量应该是1d数组,但我不相信这是真的。任何人都可以帮助我理解为什么这不起作用?

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 个答案:

答案 0 :(得分: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;
            }
        }
    }
}

答案 1 :(得分: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]始终是' '。因此,您可以先覆盖它,而不需要存储它,就像在另一个答案中一样。

答案 2 :(得分: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。 Elliot提到的是if语句中的两行都将tissue[k][l]替换为相同的值,即存储在tissue[i][j]的值。相反,我们会将第一行更改为tissue[i][j] = tissue[k][l]以执行交换。所以我们最终得到了follow方法,它将它找到的第一个字符串中的第一个空格字符与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;
            }
        }
    }
}