2015-07-13 138 views
-1

我想比較二維數組中的行。例如:比較二維數組中的行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}} 

arr1arr2是相等的,但arr1arr3不相等。

這是一棵樹的代碼。每個節點可以有任意數量的子節點。如果兩個兄弟姐妹擁有相同的二維數組(如我在問題中定義的那樣),請取消該節點。 nodeLabel顯示一個孩子是否acvtiv。任何幫助?

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

匹配二維數組元素:首先對然後長度元素相匹配。

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));