27

2 つの配列を比較するコードを作成しようとしています。最初の配列には自分の数字を入れましたが、2 番目の配列は入力ファイルから数値を取得します。この配列のサイズは、ファイルの最初の数値によって決まりますが、最初の配列のサイズは常に 10 です。長さは、両方の配列と数値で同じでなければなりません。

私のコードは以下の通りです:

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = false;
    for (int i = 0; i < array2.length; i++) {

        for (int a = 0; a < array1.length; a++) {

            if (array2[i] == array1[a]) {
                b = true;
                System.out.println("true");
            } else {
                b = false;
                System.out.println("False");
                break;
            }
        }
    }       
}
4

10 に答える 10

72

私が見たものから、あなたはそれらが等しいかどうかを確認しようとします、これが等しい場合はtrue、次のようなものを使用してください:

boolean areEqual = Arrays.equals(arr1, arr2);

これが標準的な方法です。

JavaDocから、配列も等しいと見なされるようにソートする必要があることに注意してください。

両方の配列に同じ数の要素が含まれ、2つの配列の対応する要素のペアがすべて等しい場合、2つの配列は等しいと見なされます。つまり、2つの配列に同じ要素が同じ順序で含まれている場合、2つの配列は等しくなります。

それを逃してすみません。

于 2013-02-15T15:02:25.170 に答える
35

use
Arrays.equals(ary1,ary2); // ブール値を返す

2D配列の比較にも
使用できるEDITArrays.deepEquals(ary1,ary2)

との比較については、このリンクも確認してくださいArrays.equls(ar1,ar2)Arrays.deepEquals(ar1,ar2)

Java Arrays.equals() が 2 次元配列に対して false を返す

EDIT 2
これらのライブラリメソッドを使用したくない場合は、次のようにメソッドを簡単に実装できます。

public static boolean ArrayCompare(int[] a, int[] a2) {
    if (a==a2)   // checks for same array reference
        return true;
    if (a==null || a2==null)  // checks for null arrays
        return false;

    int length = a.length;
    if (a2.length != length)  // arrays should be of equal length
        return false;

    for (int i=0; i<length; i++)  // compare array values
        if (a[i] != a2[i])
            return false;

    return true;
}
于 2013-02-15T15:03:31.287 に答える
19
public static void compareArrays(int[] array1, int[] array2) {
        boolean b = true;
        if (array1 != null && array2 != null){
          if (array1.length != array2.length)
              b = false;
          else
              for (int i = 0; i < array2.length; i++) {
                  if (array2[i] != array1[i]) {
                      b = false;    
                  }                 
            }
        }else{
          b = false;
        }
        System.out.println(b);
    }
于 2013-02-15T15:15:09.913 に答える
7

配列が同じサイズであることがわかっている場合は、並べ替えてから比較する方がおそらく高速です。

Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)

配列内のデータの順序を変更したくない場合は、System.arraycopy最初に実行します。

于 2013-02-15T15:01:59.233 に答える
2

配列が等しいかどうかは、Apache Commons ArrayUtils#isEquals()メソッドで確認できます。

于 2013-02-15T15:05:29.960 に答える
1

のような簡単なものがあり.equalsますが、コードで2つの間違いを犯したことを指摘したいと思います。b1つ目:配列を調べるとき、 istrueまたは。と言いますfalse。次に、forループがあるため、再度チェックを開始します。bしかし、あなたが価値を与えるたびに。したがって、何が起こっても、b設定される値は常にLASTforループの値です。次回は、を設定boolean b = trueし、if equal = true何もしないif equal = false、、b=false

次に、各値をでチェックインarray1array2ます。私が正しく理解していれば、配列内の同じ場所にある値をチェックするだけで済みます。つまり、2番目のforループを削除して、次のようにチェックする必要がありますif (array2[i] == array1[i])。そうすれば、コードも機能するはずです。

コードは次のように機能します。

public static void compareArrays(int[] array1, int[] array2) {
    boolean b = true;
    for (int i = 0; i < array2.length; i++) {
        if (array2[i] == array1[i]) {
            System.out.println("true");
        } else {
            b = false;
            System.out.println("False");
        }
    } 
    return b;

}

しかし、他の人が言っているように、もっと簡単なのは次のとおりです。Arrays.equals(ary1、ary2);

于 2013-02-15T15:01:57.430 に答える
1

配列の長さは同じで、数字は全体を通して同じである必要があります(配列の最初の数字はsasmeなどである必要があります)

このコメントに基づいて、あなたはすでにあなたのアルゴリズムを持っています:

  1. 両方の配列の長さが同じかどうかを確認します。

    array1.length == array2.length

  2. 番号は同じ位置で同じでなければなりません:

    array1 [x] == array2 [x]

これを知っていると、次のようなコードを作成できます(これは、Javaコードではなく、アルゴリズムです)。

function compareArrays(int[] array1, int[] array2) {

    if (array1 == null) return false
    if (array2 == null) return false

    if array1.length != array2.length then return false

    for i <- 0 to array1.length - 1
        if array1[i] != array2[i] return false

    return true
}

注:関数は、booleanではなく、をvoid返し、別の変数で戻り値を復元し、それを使用してメッセージ「true」または「false」を出力する必要があります。

public static void main(String[] args) {
    int[] array1;
    int[] array2;
    //initialize the arrays...
    //fill the arrays with items...
    //call the compare function
    boolean arrayEquality = compareArrays(array1, array2);
    if (arrayEquality) {
        System.out.println("arrays are equals");
    } else {
        System.out.println("arrays are not equals");
    }
}
于 2013-02-15T15:16:09.827 に答える