Подтвердить что ты не робот

Сравнение двух целых массивов в java

Я пытаюсь написать код для сравнения двух массивов. В первом массиве я поместил свои собственные цифры, а второй массив принимает числа из входного файла. Размер этого массива определяется первым числом в файле, тогда как первый массив всегда имеет размер 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;
            }
        }
    }       
}
4b9b3361

Ответ 1

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

Ответ 2

Из того, что я вижу, вы просто пытаетесь понять, равны ли они, если это правда, просто перейдите к чему-то вроде этого:

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

Это стандартный способ сделать это.

Ops, это означает, что массивы также должны быть отсортированы, чтобы считаться равными, из java doc:

"Два массива считаются равными, если оба массива содержат одинаковое количество элементов, а все соответствующие пары элементов в двух массивах равны. Другими словами, два массива равны, если они содержат одни и те же элементы в том же порядке"

Извините за отсутствие этого.

Ответ 3

использовать Arrays.equals(ary1,ary2);//возвращает логическое значение

ИЗМЕНИТЬ
вы можете использовать Arrays.deepEquals(ary1,ary2) для сравнения 2D-массивов, а также

также проверьте эту ссылку для сравнения сравнения между Arrays.equls(ar1,ar2) и Arrays.deepEquals(ar1,ar2)

Java Arrays.equals() возвращает false для двухмерных массивов

РЕДАКТИРОВАТЬ 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;
}

Ответ 4

Если вы знаете, что массивы имеют одинаковый размер, это доказуемо быстрее сортировать, а затем сравнивать

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

Если вы не хотите изменять порядок данных в массивах, сначала выполните System.arraycopy.

Ответ 5

Ни один из существующих ответов не предполагает использование компаратора и поэтому не может использоваться в бинарных деревьях или для сортировки. Поэтому я просто оставлю это здесь:

public static int compareIntArrays(int[] a, int[] b) {
    if (a == null) {
        return b == null ? 0 : -1;
    }
    if (b == null) {
        return 1;
    }
    int cmp = a.length - b.length;
    if (cmp != 0) {
        return cmp;
    }
    for (int i = 0; i < a.length; i++) {
        cmp = Integer.compare(a[i], b[i]);
        if (cmp != 0) {
            return cmp;
        }
    }
    return 0;
}

Ответ 6

Несмотря на то, что есть что-то простое, как .equals, я хотел бы указать на две ошибки, которые вы сделали в своем коде. Первое: когда вы проходите через массивы, вы говорите b - true или false. Затем вы снова начинаете проверять, из-за цикла for. Но каждый раз, когда вы даете b значение. Таким образом, независимо от того, что происходит, значение b устанавливается как всегда значение LAST for-loop. В следующий раз установите boolean b = true, if equal = true, ничего не сделайте, if equal = false, b=false.

Во-вторых, вы теперь проверяете каждое значение в array1 с каждым значением в array2. Если я правильно понимаю, вам нужно только проверить значения в том же месте в массиве, то есть вы должны удалить второй цикл 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);

Ответ 7

Вы можете проверить равенство массива с помощью метода Apache Commons ArrayUtils # isEquals().

Ответ 8

Длина массивов должна быть одинаковой, а числа будут одинаковыми во всех (1-е число в массивах должно быть sasme и т.д.)

Основываясь на этом комментарии, у вас уже есть свой алгоритм:

  • Проверьте, имеют ли обе массивы одинаковые длины:

    array1.length == array2.length

  • Номера должны быть одинаковыми в одной и той же позиции:

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

Ответ 9

Здесь мой подход, он может быть полезен другим.

public static void compareArrays(int[] array1, int[] array2) {
    if (array1.length != array2.length)
    {
           System.out.println("Not Equal");
    }
    else
    {
        int temp = 0;
        for (int i = 0; i < array2.length; i++) {  //Take any one of the array size
            temp^ = array1[i] ^ array2[i];   //with help of xor operator to find two array are equal or not                 
        }
        if( temp == 0 )
        {
             System.out.println("Equal");
        }
        else{
             System.out.println("Not Equal");
        }
    }
}

Ответ 10

Для полноты вам должен быть метод, который может проверять все массивы:

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