java - 将二维数组与数组进行比较,并替换匹配的元素

标签 java arrays multidimensional-array

基本上,我试图将二维数组与数组进行比较,如果单个数组中的元素与二维数组匹配,则二维数组将替换单个数组的值。我举个例子:

因此,有两个二维数组:

arrayOne = [[livesAt, fname, city], [worksAt, fname, company]]
arrayTwo = [[livesAt, x, y], [worksAt, x, z]]

还有一个数组:

findOut = [x,y,z]

目的是arrayOne替换arrayTwo中的所有内容,并通过与arrayTwo比较找出findOut数组中的元素。

编辑:“x”的值读取数组中位置的值...即fname。因此,第一行和第二行 (fname) 的“x”值必须相同

答案应该是:

arrayOne = [[livesAt, fname, city], [worksAt, fname, company]]
arrayTwo = [[livesAt, fname, city], [worksAt, fname, company]]
findOut = [fname,city,company]

我在我的代码中尝试过这样做,如下所示:

for (int i = 0; i < arrayOne.length;i++ ) {
        for (int j = 0; j < arrayTwo.length; j++){
            for(int x = 0; x < findOut.length;x++){
                if(arrayTwo[i][j].equals(findOut[x])) {
                    arrayTwo[i] = arrayOne[i];
                    arrayTwo[j] = arrayOne[j];
                    findOut[x] = arrayOne[i][j];

                    System.out.println("Match found");
                }else{
                    System.out.println("Not found");
                }
        }
    }
}

除了 findOut 数组仅替换第一个元素“x”而不替换其他元素之外,大部分都有效。

[fname, y, z]

在循环期间,它打印:

Not found
Not found
Not found
Match found
Not found
Not found
Not found
Not found
Not found
Match found
Not found
Not found

我强烈地感觉到我的循环有问题。谁能给我任何关于如何解决这个问题的指示或建议?我一直在尝试解决这个问题,但只取得了很小的进展。

最佳答案

问题是;当你用 i < arrayTwo.length 给出 for 循环条件时,它只迭代 2 次,因为 arrayTwo其中只有 2 个数组。但是您想要遍历这 2 个数组的所有元素,并且没有为其提供循环。

此外,当您找到匹配项时,您都会更改 arrayTwofindOut数组值是动态的,当您尝试查找相同元素的匹配时,这将导致不匹配。所以它工作错误。您需要存储 findOut 的先前值为了在重复值的情况下再次比较这些值( x, y, z )(即,您在 x 中有两个 arrayTwo 值并且在第一次匹配时,您将 x 更改为 fname ,因此不会有是任何第二个匹配)。你可以这样做:

String[] temp = findOut.clone();

for (int i = 0; i < arrayTwo.length; i++) {
        for (int j = 0; j < arrayTwo[i].length; j++) {
            for (int x = 0; x < temp.length; x++) {
                if (arrayTwo[i][j].equals(temp[x])) {
                    arrayTwo[i][j] = arrayOne[i][j];
                    findOut[x] = arrayTwo[i][j];

                    System.out.println("Match found");
                }
                else {
                System.out.println("Not found");
                }
            }
        }
    }

数组将按照您的预期发生变化:

arrayOne = [[livesAt, fname, city], [worksAt, fname, company]]
arrayTwo = [[livesAt, fname, city], [worksAt, fname, company]]
findOut = [fname,city,company]

关于java - 将二维数组与数组进行比较,并替换匹配的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801360/

相关文章:

java - hibernate中get泛型方法的含义

java - 在 Java Server Faces 框架中使用 Spry

java - 为什么 Jackson 用一个以类(class)命名的额外层包裹我的对象?

java - BufferedReader.readLine() 有时会挂起

时间:2019-03-09 标签:c#Battleshipsminigame

c - 如何为 C99 中隐式定义的多维数组分配内存?

java - 当条件应该为 true 时,if-else 语句的计算结果不为 true

c++ - 具有未定义大小的数组作为类成员

c++ - 如何将 3d int* 指针数组传递给函数并检查是否已满?

Javascript,重组数组