Java比较二维数组

时间:2014-02-25 07:42:12

标签: java comparison multidimensional-array

我真的需要帮助来比较二维数组。 如果我有以下数组值:

  • dok1 [paragraf] [kalimat]
  • DOK2 [paragraf] [kalimat]

* 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.它们甚至没有递增。我在循环方法中做错了吗?有人有更好的方法吗?谢谢.. :))

3 个答案:

答案 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
            }
        }
    }
}