交换或移动2D阵列的元素

时间:2017-02-10 18:53:34

标签: java arrays

我有一个这种格式的二维数组(矩阵):

mongo --version
MongoDB shell version v3.4.1
git version: 5e103c4f5583e2566a45d740225dc250baacfbd7
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
allocator: tcmalloc
modules: none
build environment:
    distmod: debian71
    distarch: x86_64
    target_arch: x86_64

输入

String[][] start;
start = new String[4][4];

输出

d d + +
a d d +
a b b c
+ b _ d

目标是在数组周围交换/移动/移位下划线(“_”),除非我不能用“+”字符交换。我只能换掉这些字母。

我正在尝试让其他角色用“_”交换位置但不替换它们。我试图在循环中进行此操作

我不知道怎么回事。我很感激任何建议。

我通过在最后一行交换“_”和“b”来改变数组的状态。这是一个新的数组,我可以与初始状态进行比较。我必须将新状态存储在另一个数组中,以便与初始状态进行比较。

3 个答案:

答案 0 :(得分:1)

你可以使用两个循环,因为你有2d数组并使用if检查你的值是否等于public static void main(String[] args) { String[][] start = {{"d", "d", "+", "+"}, {"a", "d", "d", "+"}, {"a", "b", "b", "c"}, {"", "a", "_", "d"}}; for (int i = 0; i < start.length; i++) { for (int j = 0; j < start[i].length; j++) { System.out.print(start[i][j] + " "); //here you should to check if your index is > 0 if (j > 0) { //here you make your swapping if your attribute = to _ //and the previews value is not equal to + like you said in your question if (start[i][j].equals("_") && !start[i][j-1].equals("+")) { String x = start[i][j - 1]; start[i][j - 1] = "_"; start[i][j] = x; } } } System.out.println(); } //print your result for (int i = 0; i < start.length; i++) { for (int j = 0; j < start[i].length; j++) { System.out.print(start[i][j] + " "); } System.out.println(); } } 你可以使用它:

d d + + 
a d d + 
a b b c 
+ _ b d 

结果是:

Words = ['Hi';'how','are','you','lets','meet','up']

答案 1 :(得分:0)

不确定交换和移动到底意味着什么。但是你的数组基本上只是一个内存网格。您只能为单元格指定新值。你无法移动价值观。如果您想要执行除分配之外的其他操作,则需要构建此操作。就像移动一样,可以将值分配给新单元格,而不是将旧单元格指定为null。在大多数情况下,交换需要一个临时变量。

答案 2 :(得分:0)

因为在将"_"与其他包含字符串的字母表交换后,您的问题并不清楚。我给出了一个可能适合你的骨架程序。

String[][] start = new String[4][4];

for (int row = 0; row < start.length; row++) {
    for (int column = 0; column < start[row].length; column++) {
        if (start[row][column].equals("_")) {
            // you can swap character "_" with other alphabets
        }
    }
}

要检查字符串是否只包含字母,可以使用以下内容。

if (start[row][column].matches("[a-zA-Z]+")) {
    // string contains only alphabets, now you do what you want to do
}

特别是,您需要遍历矩阵的每一行和列,并检查字符串是否仅包含字母或下划线。然后你可以在访问矩阵的元素时进行交换,但要注意索引。