比较字符串的2D数组

时间:2015-05-17 03:57:36

标签: java arrays

我有一个生成字符串2D数组的方法,然后将它们放在ArrayList中。我正在尝试编写一个方法,该方法采用一个新的2D数组并检查它已经在数组中用于复制。这就是我到目前为止,它应该返回true以获得新的解决方案,但每次都会返回false。调用方法打印出阵列,我可以看到它们不一样。

public static boolean tester(String[][] b, ArrayList<String[][]> s)
{
    if (s.size() == 1) return true;
    boolean n = true;
    int count;
    int size = b.length * b[0].length;

    for (int i = 0; n && i < s.size() -1; i ++)

    {   
        count = 0;
        for (int j = 0; j < s.get(i).length; j ++)
            for (int k = 0; k < s.get(i)[0].length; k ++)
                if (s.get(i)[j][k].equals(b[j][k])) count ++;
                    if (count == size) n = false;

    }

    return n;
}

2 个答案:

答案 0 :(得分:0)

使用Arrays.deepEquals

,您的代码可以更简单地方式
public static boolean nonDuplicate(ArrayList<String[][]> s, String[][] b){

    for(String[][] e : s){
        if(Arrays.deepEquals(e, b)) return false; //e and b are duplicates
    }

    return true;
}

您的代码可能不正确,因为您没有在for循环周围使用大括号({})。所以当你写道:

    for (int j = 0; j < s.get(i).length; j ++)
        for (int k = 0; k < s.get(i)[0].length; k ++)
            if (s.get(i)[j][k].equals(b[j][k])) count ++;
                if (count == size) n = false;

它被解释为:

      for (int j = 0; j < s.get(i).length; j ++){
        for (int k = 0; k < s.get(i)[0].length; k ++){
            if (s.get(i)[j][k].equals(b[j][k])) count ++;
        }
      }

      if (count == size) n = false;

这很可能(?)不是你的意图通过你的缩进来判断,但值得注意的是,除了分隔标记之外,空格(包括缩进)在java中并不是非常重要。

答案 1 :(得分:0)

这是编译器解释代码的方式:

for (int i = 0; n && i < s.size() -1; i ++)
{   
    count = 0;
    for (int j = 0; j < s.get(i).length; j ++) {
        for (int k = 0; k < s.get(i)[0].length; k ++) {           
            if (s.get(i)[j][k].equals(b[j][k])) count ++; 
        }
    }
    if (count == size) n = false;
}

最好始终使用{}来澄清您对代码编译器/读者的意图。

我猜你想要的是这个:

for (int i = 0; n && i < s.size() -1; i ++)
{   
    count = 0;
    for (int j = 0; j < s.get(i).length; j ++) {
        for (int k = 0; k < s.get(i)[0].length; k ++) {           
            if (s.get(i)[j][k].equals(b[j][k])) {
                count ++; 
            }
            if (count == size) {
                n = false;
            }
        }
    }
}

但你也可以写:

public static boolean tester(String[][] b, ArrayList<String[][]> s)
{ 
    // ..

    for (int i = 0; n && i < s.size() -1; i ++)  {   
        for (int j = 0; j < s.get(i).length; j ++) {
            for (int k = 0; k < s.get(i)[0].length; k ++) {   

                if (s.get(i)[j][k].equals(b[j][k]) == false) {
                    return true; 
                }
            }
        }
    }

    return false;
}