基本上,我试图将二维数组与数组进行比较,如果单个数组中的元素与二维数组匹配,则二维数组将替换单个数组的值。我举个例子:
因此,有两个二维数组:
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 个数组的所有元素,并且没有为其提供循环。
此外,当您找到匹配项时,您都会更改 arrayTwo
和findOut
数组值是动态的,当您尝试查找相同元素的匹配时,这将导致不匹配。所以它工作错误。您需要存储 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/