我真的需要帮助来比较二维数组。 如果我有以下数组值:
* dok1
[0][0] = Deskripsi Hotel
[1][0] = PETIK HOTEL
[2][0] = Pelayanan yang ramah juga diberikan di hotel ini
[2][1] = Lembang no 24
[2][2] = hotel ini berdiri pada tahun 1994
[3][0] = Gambar Template/layout pada website ini
* DOK2
[0][0] = Banyak penjual kerudung di jalan keluar pabrik
[1][0] = Di sisi-sisi penjual itu juga nampak seperti penjual kurma dan buah dadakan
[1][1] = Penjual makanan juga memenuhi trotoar jalan, yang sebagian besar adalah penjual dadakan
[1][2] = Mulai dari menu takjil hingga makanan berbuka puasa tersedia disini
[2][0] = Belum lagi penjual pakaian yang memanjang hingga ujung jalan
[3][0] = Kerumunan pedagang tersebut makin membuat lalu lintas padat
我需要比较它们以计算字符串元素之间的相似性。它应该是这样的:
[0][0] vs [0][0]
[0][0] vs [1][0]
[0][0] vs [1][1]
[0][0] vs [1][2]
[0][0] vs [2][0]
[0][0] vs [3][0]
等等。
我试图使用4个嵌套循环
for (int i = 0; i < dok1.length; i++) {
for (int j = 0; j < dok1[i].length; j++) {
for (int k = 0; k < dok2.length; k++) {
for (int l = 0; l < dok2[k].length; l++) {
但结果如下:
[0][0] vs [0][0]
[0][0] vs [1][0]
[0][0] vs [2][0]
[0][0] vs [3][0]
[1][0] vs [0][0]
[1][0] vs [1][0]
[1][0] vs [2][0]
[1][0] vs [3][0]
等等。
可以清楚地看到dok2中kalimat的数组元素仍为0.它们甚至没有递增。我在循环方法中做错了吗?有人有更好的方法吗?谢谢.. :))
答案 0 :(得分:1)
你必须同时走两个数组,而不是四个嵌套循环。
assert dok1.length == dok2.length
int firstDimension = dok1.length;
for (int i = 0; i < firstDimension; i++) {
assert dok1[i].length = dok2[i].length;
int secondDimension = dok1[i].length;
for (int j = 0; j < secondDimension; j++) {
// Comparing
}
}
答案 1 :(得分:1)
int similarCounter=0;
for(int i=0;i<paragraf;i++){//paragraf is dok1.length
for (int j = 0; j < kalimat; j++) {//kalimat is dok1.width
if((dok1[i][j]).equals(dok2[i][j])){//replace it with your codition of comparison
System.out.println("Similar ("+i+","+j+")");
similarCounter++;
}
}
}
System.out.println("There are tolally "+similarCounter+" similar!");
答案 2 :(得分:1)
我怀疑你的原始循环是正确的,但你在最里面的循环体中有一个下标错误。但是,您的循环效率很低,因为您反复评估内部循环中的数组访问表达式,这些表达式对于外部循环的每次迭代都是常量。您可以使用一些临时变量来加速代码(并最大限度地降低下标错误的风险):
for (int i = 0; i < dok1.length; i++) {
final String[] row1 = dok1[i];
for (int j = 0; j < row1.length; j++) {
final String item1 = row1[j];
for (int k = 0; k < dok2.length; k++) {
final String[] row2 = dok2[k];
for (int l = 0; l < row2.length; l++) {
final String item2 = row2[l];
// compare item1 (== dok1[i][j]) with item2 (== dok2[k][l])
}
}
}
}
如果您不需要索引本身(只是每个数组元素的String
值),您可以使用enhanced for
loop以更简单的代码完成相同的循环:
for (final String[] row1 : dok1) {
for (final String item1 : row1) {
for (final String[] row2 : dok2) {
for (final String item2 : row2) {
// compare item1 with item2
}
}
}
}