2015-07-13 3 views
-1

Я пытаюсь сравнить строки в 2D массиве. Например:Сравнение строк в массивах 2d java

arr1={{1, 0, 0, 0} , {0, 0, 0, 0} , {0, 1, 0, 0}} 
arr2={{0, 0, 0, 0} , {0, 1, 0, 0} , {1, 0, 0, 0}} 
arr3={{1, 0, 0, 0} , {0, 0, 0, 1} , {0, 1, 0, 0}} 

arr1 и arr2 равны, но arr1 и arr3 не равны.

Это код дерева. У каждого узла может быть любое количество детей. Если у двух братьев и сестер одинаковый 2D-массив (как я определил в вопросе), удалите узел. nodeLabel показывает, если ребенок активен. Любая помощь?

void removNode(Node subtree){ 
    int count=0; 
    int [] arr1=new int [num2+1]; 
    int [] arr2=new int [num2+1]; 
    int [][] scharr1=new int [num1+1] [num2+1]; 
    int [][] scharr2=new int [num1+1] [num2+1]; 


    if(!subtree.nodeChildren.isEmpty()){ 
    for(int l=0;l<subtree.nodeChildren.size();l++){ 
     if(subtree.nodeChildren.get(l).nodeLabel==1){ 

      for(int t=0;t<subtree.nodeChildren.size();t++){ 
       scharr1=subtree.nodeChildren.get(l).scharr; 
       scharr2=subtree.nodeChildren.get(t).scharr; 
       if(l!=t){ 
        for(int i=0;i<=num1;i++){ 
         arr1=scharr1[i]; 
         for(int k=0;k<=num1;k++){ 
          arr2=scharr2[k]; 
          if(Arrays.equals(arr1, arr2) && subtree.nodeChildren.get(t).nodeLabel==1){ 
           count++; 
           Arrays.fill(scharr2[k], -1); 
           k=num1+1; 
          } 

         }  
        } 
       } 
       if(count==num1+1){ 
        subtree.nodeChildren.get(t).nodeLabel=0; 
       } 
      } 
     } 
     count=0; 
    } 
} 

}

+7

Где ваш код, чтобы помочь. – Satya

+0

Почему arr1 и arr2 равны? –

+1

похоже на http://stackoverflow.com/questions/21434258/comparing-two-rows-in-a-single-2d-array – Maddy

ответ

0

Простая реализация:

Проверяет, имеют ли два 2_D массивы имеют одинаковые строки.

public boolean areEqual(int arr1[][],int arr2[][]){ 
    int colNum=arr1[0].length; 
    int rowNum=arr1.length; 
    int a=0,count,counter=0; 
    while(a<rowNum){ 
     int b=0; 
     while(b<rowNum){ 
      count=0; 
      for(int c=0;c<colNum;c++){ 
       if(arr1[a][c]==arr2[b][c]) 
        count++; 
      } 
      if(count==colNum){ 
       counter++; 
       break; 
      } 
      b++; 
     } 
     a++; 
    } 
    if(counter==rowNum){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

public static void main(String[] args) { 

    int arr1[][]={{1, 0, 0, 0} , {0, 0, 0, 0} , {0, 1, 0, 0}}; 
    int arr2[][]={{0, 0, 0, 0} , {0, 1, 0, 0} , {1, 0, 0, 0}}; 
    int arr3[][]={{1, 0, 0, 0} , {0, 0, 0, 1} , {0, 1, 0, 0}}; 

    Array array=new Array(); 
    System.out.println(array.areEqual(arr1,arr2)); 
    System.out.println(array.areEqual(arr1,arr3)); 
    } 

} 

Выходы:
истинные
ложные

0

Совпадение 2d массив элементов: во-первых матчей за длину, то элементы.

public static boolean matchArrays(int[][] arr1, int[][] arr2) { 

    boolean match = arr1.length == arr2.length; 

    if (match) { 
     for (int[] obj1 : arr1) { 
      if (match) { 
       for (int[] obj2 : arr2) { 
        if (Arrays.equals(obj1, obj2)) { 
         match = true; 
         break; 
        } else 
         match = false; 
       } 
      } 
     } 
    } 
    return match; 
} 

Пример вызова:

System.out.println(matchArrays(arr1, arr2)); 
System.out.println(matchArrays(arr1, arr3)); 
Смежные вопросы