Сравнение двух целых массивов в 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;
}
}
}
}
Ответы
Ответ 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;
}