2016-11-23 9 views
-1

2つの異なるサイズの配列があります。インデックスインデックスによって配列の両方に一致し、いずれかの差がある場合の結果を表示する方法 シナリオ1.インデックスとインデックスの一致による2つの異なるサイズの配列の比較

A=[1,2,3] 
b=[1,3,2,4] 

シナリオ2

a=[1,3,2,4] 
b=[1,3,2,] 

。 配列の長さが同じ場合に結果を得ることができます。配列の大きさAがBよりも短い場合や、逆になった場合は、IndexOUTofBoundexceptionという明白な理由は存在しない要素にアクセスしようとしていることです。

for (int j=i;j<=i;j ++) 
if (A[i].equals(B[i])) { 
System.out.println(A[i] + "\t " + B[i]); 
} else { 
NumberOfDifference++; 
System.out.println(arrayLines1[i] + "--" + arrayLines2[i]); 
       } 

2つの配列の間に違いがある場合は、要素で表示するだけです。シナリオ2の場合 Array aには新しい要素4がありますが、Array bにはnull値があります。

+2

は何をしますか?その後、一致する基準は何ですか? –

+1

サイズが等しくない場合は何をしたいですか?要件は何ですか?欠落している要素がゼロであると仮定する – developer

+1

存在しない要素との比較のために結果を望んでいるとは言いませんでした。 –

答えて

0

明らかに、最も短いインデックスまで一致するインデックスのみを比較することができます。質問は、あなたが残りの要素で行うことになっているものを指定していませんが、引数のために、我々はちょうどそれらを印刷しましょう:

int sharedLength = Math.min(a.length, b.length); 
for (int i = 0; i < sharedLength; ++i) { 
    if (a[i].equals(b[i])) { 
     System.out.println(a[i] + "\t" + b[i]); 
    } else { 
     System.out.println(a[i] + "--" + b[i]); 
} 

// Here, you could either use an if statement to find the longer array 
// Or, more elegantly(?), just loop over both of them. 
// One of these loops will not execute because the array is too short: 
for (int i = sharedLength; i < a.length; ++i) { 
    System.out.println(a[i] + "--"); 
} 
for (int i = sharedLength; i < b.length; ++i) { 
    System.out.println("\t--" + b[i]); 
} 
0
int m = A.size() 
int n = B.size() 

i =0 
NumberOfDifference = 0 

while (i< m && i<n) 
    if (a[i]==b[i]){   
      System.out.println(A[i] + "\t " + B[i]); 
    }else{ 

     NumberOfDifference++; 
     System.out.println(A[i] + "--" + B[i]); 
     } 
     i++; 
     } 
while (i<m) { 
      NumberOfDifference++; 
      System.out.println(A[i] + "--" + "NO Element");  
      i++ 
} 
while (i<n) { 
      NumberOfDifference++; 
      System.out.println("No Element" + "--" + B[i]);  
      i++; 
} 
+0

このコードは動作していませんnullPointerexceptionを与える –

+0

あなたはA&Bを初期化する必要があります – Kajal

0

この方法は、あなたが異なるを見つけることができます要素:

for (int i=0; i < Math.max(A.length, B.length); i++) { 
    if (i >= A.length) { 
    NumberOfDifference++; 
    System.out.println("--" + B[i]); 
    } else if (i >= B.length) { 
    NumberOfDifference++; 
    System.out.println(A[i] + "--"); 
    } else if (A[i].equals(B[i])) { 
    System.out.println(A[i] + "\t " + B[i]); 
    } else { 
    NumberOfDifference++; 
    System.out.println(A[i] + "--" + B[i]); 
    } 
} 

これは簡単な方法です:

Arrays.equals(A,B) 
+0

これは解決策ではありません。また、配列インデックスの値が一致しないか、1つの配列に値があり、別の配列にnullがある場合は、その差を数えます。 –

+0

これは3行目と6行目で発生します。 – mm759

0

あなただけの配列たちを反復処理しようとすることができより短い配列の長さを最大にする。例えば

A=[1,2,3]; 
B=[1,3,2,4]; 
// Assign the shorter length to the temporary Integer minimum length 
int minimum_length = (A.length <= B.length) ? A.length : B.length 
for (int count=0; count < minimum_length; count++) { 
    if (A[count).equals(B[count]) { 
     System.out.println(A[i] + "\t " + B[i]); 
    } else { 
     NumberOfDifference++; 
     System.out.println(A[i] + "--" + B[i]); 
} 
//Now you can just add all other integers as differences to the NumberOfDifferences-Object 
for (int others = A.length; others < B.length; others++) { 
    NumberOfDifferences++; 
    System.out.println("null" + "--" + B[i]); 
} 

これは、今私はあなただけAが長いBよりもある場合も同様のオプションを追加するには、この実装の周りに回すことができると思い、1つのオプションのジョブを実行する必要があります

これは役に立ちましたか?

0

他の人がコメントしたように質問はあまり明確ではありません... インデックスの比較でインデックスを行い、余分な要素を表示する必要があるという私の前提を行います。

だから、以下のような何かを行うことができます: のはA = [1,2,3] B = [1,3を言ってみましょう:その配列を使用して、より小さなインデックスとループと

  1. 最初のFind配列、2,4] したがって、Aの長さにループします。

    int size = A.length() < B.length() ? A.length() : B.length(); for (int i=0;i < size; i++) { if (A[i].equals(B[i])) { System.out.println(A[i] + "\t " + B[i]); } else { NumberOfDifference++; }

  2. 今、あなたは、より大きなアレイとショーの違いの上にたどることができます: 同じように横断するためにどの配列決定: if(A.length() < B.length()) {
    for(int i=size; i < A.length(); i++) { System.out.println(A[i]); } } else { for(int i=size; i < B.length(); i++) { System.out.println(B[i]); } }

0
  1. こんにちは、あなたはユーザはarray-listでも、配列 を使用しているとしたら、私の解決策はここにあります:

    //次の2つの配列している:サイズが異なる場合、 "[]" と "B []"

    if (a.length == b.length){ // the code that you say have have written 
        } 
        else if (a.length > b.length) 
        { 
         int temp[] = new int[a.length]; // initialize a int[] with length of array a[] 
         for (int i = 0 ;b.length>i ; i++){ 
          temp[i] = b[i]; 
         } 
    
         for (int i = b.length; a.length> i ; i++) 
         { 
          temp[i] = -1 ; // some vaue you know wont be in your array 
         } // now you have two array with same length 
         int NumberOfDifference = 0 ; 
         for (int i=0 ; i<a.length;i++){ 
          if (a[i]==(b[i])) { 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]); 
          } 
          else 
          { 
           NumberOfDifference++; 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i])); 
          } 
         } 
    
        } // a.length < b.length 
        else { 
    
         int temp[] = new int[b.length]; // initialize a int[] with length of array b[] 
         for (int i = 0 ;a.length>i ; i++){ 
          temp[i] = a[i]; 
         } 
    
         for (int i = a.length; b.length> i ; i++) 
         { 
          temp[i] = -1 ; // some vaue you know wont be in your array 
         } // now you have two array with same length 
         int NumberOfDifference = 0 ; 
         for (int i=0 ; i<b.length;i++){ 
          if (b[i]==(a[i])) { 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i]); 
          } 
          else 
          { 
           NumberOfDifference++; 
           System.out.println("equal occured at index : " + i +" : "+ a[i] + "\t " + b[i])); 
          } 
         } 
    
        } 
    
関連する問題