2016-04-17 32 views
-2

私は以下の質問をしています。 2つの配列を比較し、与えられた配列の要素が一致しない最初のインデックスを見つけるメソッドを実装する必要があります。私は次のコードが、そのちょっと弱い試してみました :それは両方の配列のすべての要素が同じであれば-1を返す、othewise時に最初のインデックスを返します2つの配列を比較し、配列がもう一致しないインデックスを見つけます。

public int UnmatchedElementsOnIndex(int[] x, int[] y) { 

     // Also check for the list length 
     if(x.length < y.length) 
      return x.length; 
     else if(y.length < x.length) 
      return y.length; 

     for (int i = 0; i < x.length; i++) { 
       if(x[i] != y[i]) return i; 
      } 
      return -1; 
     } 

public int UnmatchedElementsOnIndex(int[] x, int[] y) { 

    for (int i = 0; i < x.length; i++) { 
     for (int j = 0; j < y.length; j++) { 
      if (x[i] == y[j]) { 
       // value is contained in both arrays 
      } 
      // otherwise not 
     } 
     return 0; 
    } 
+1

これは間違っています。単一のループといくつかのifステートメントで行うことができます。 –

+0

不一致の要素が見つかった場合に++をカウントする余分な変数を使うのは難しいですが、これを実装する方法がわかりません –

+0

SOのスコアシーカーから答えを探すのではなく、まず自分で試してください。あなたはそれを行うことができます。 –

答えて

0

はこれを試してみてください同じ位置に同じ要素が含まれていない配列。

+0

ループ中にArrayIndexOutOfBoundExceptionが発生することがあります。 –

0

アレイの各要素をスキャンするだけで済みます。次に、一致していない要素を特定します。以下は、これを実装する方法の1つです。

public int UnmatchedElementsOnIndex(int[] x, int[] y) { 
    int index=-1; 
    //lengths should be equal. If not, we can't compare arrays 
    if(x.length!=y.length){ 
     return -2; 
    } 
    for (int i = 0; i < x.length; i++) { 
     if (x[i] != y[i]) { 
      index=i; 
      break; 
     } 
    } 
    //returns -1, if all the elements are equal 
    return index; 
} 
+0

これは助けになりました!ありがとうございました –

-1
public int UnmatchedElementsOnIndex(int[] x, int[] y) { 
    for (int i = 0; i < x.length && i < y.length; i++) { 
     if (x[i] != y[i]) { 
      return i; 
     } 
     return -1; 
    } 
} 
0

まずオフ:それを行うにはいくつかの方法があります。あなたは[]あなたがこのようなコードを短くすることができる2つのint型を比較したいと仮定すると、

public static int getDifferIndex(int[] a, int[] b) { 
     int i = 0; 
     while (i < a.length && i < b.length && a[i] == b[i++]); 
     return i; 
    } 

は、ここでそれを試してみてください。https://ideone.com/zl0Hji

は、あなたが実装されたオブジェクトと連携し、より一般的な解決をしたいと仮定すると、 boolean equals(Object)これを次のように書き直すことができます。

public static int getDifferIndex(Object[] a, Object[] b) { 
     int i = 0; 
     while (i < a.length && i < b.length && a[i].equals(b[i++])); 
     return i; 
    } 
関連する問題