Java 比较字符串的二维数组

Java 比较字符串的二维数组,java,arrays,Java,Arrays,我有一个方法,可以生成一个二维字符串数组,然后将它们放在ArrayList中。我正在尝试编写一个方法,该方法采用一个新的2D数组,并将其与数组中已存在的数组进行比较,以进行复制。这就是我到目前为止所知道的,对于一个新的解决方案,它应该返回true,但每次都返回false。调用方法打印出数组,我可以看到它们不一样 public static boolean tester(String[][] b, ArrayList<String[][]> s) { if (s.size()

我有一个方法,可以生成一个二维字符串数组,然后将它们放在
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;
}
公共静态布尔测试仪(字符串[][]b,数组列表s)
{
如果(s.size()==1)返回true;
布尔n=真;
整数计数;
int size=b.length*b[0]。长度;
对于(int i=0;n&&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])) count ++;
        }
      }

      if (count == size) n = false;
for(int j=0;j

从缩进判断,这很可能不是您的意图,但在java中,除了分隔标记外,空白(包括缩进)并没有太大意义。

编译器就是这样解释代码的:

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;
}
公共静态布尔测试仪(字符串[][]b,数组列表s)
{ 
// ..
对于(inti=0;n&&i
“字符串的双数组”称为二维数组,简称2d数组。编程中的术语
double
double
类型“保留”。与你的回答/问题无关,但我必须仔细阅读其中的一些句子,以确保我正确地理解了它;)如果您理解该写操作,那么当它与arraylist中的任何一个2D数组不匹配时,它是否会停止并返回“false”?我需要它来查看整个列表。deep.equals的解决方案仍然每次返回一个false…我开始怀疑代码中的其他地方是否发生了奇怪的事情;但是,当我将每个2D数组添加到arraylist时,我会打印出来,我可以看到它们不一样,所以我不知道它可能是什么。嘿,谢谢你的帮助。这实际上是程序中其他地方的一个问题——arraylist中完全充满了对相同d2d Darray的引用。
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;
}