Estoy tratando de escribir código para comparar dos matrices. En el primer array he puesto mis propios dígitos, pero el segundo el array toma números del fichero de entrada. El tamaño de este array viene determinado por el primer número del fichero mientras que el primer array es siempre de tamaño 10. La longitud debe ser la misma para ambos arrays así como los números. Mi código es el siguiente:
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;
}
}
}
}
Por lo que veo solo tratas de ver si son iguales, si esto es cierto, solo ve con algo como esto:
boolean areEqual = Arrays.equals(arr1, arr2);
Esta es la forma estándar de hacerlo.
Ops, parece que las matrices también deben ser ordenados para ser considerados iguales, desde el doc java:
"Dos matrices se consideran iguales si ambas matrices contienen el mismo número de elementos, y todos los correspondientes pares de elementos en las dos matrices son iguales. En otras palabras, dos matrices son iguales si contienen los mismos elementos en el mismo orden"
Perdona que me lo haya perdido.
Si se sabe que las matrices tienen el mismo tamaño, es mucho más rápido ordenarlas y compararlas.
Arrays.sort(array1)
Arrays.sort(array2)
return Arrays.equals(array1, array2)
Si no desea cambiar el orden de los datos en las matrices a continuación, hacer un System.arraycopy
en primer lugar.
Aunque hay algo fácil como .equals
, me gustaría señalar DOS errores que has cometido en tu código. El primero: cuando recorres las matrices, dices que b
es true
o false
. Luego empiezas de nuevo a comprobar, por el bucle for. Pero cada vez le das a b
un valor. Así que, pase lo que pase, el valor de b
es siempre el valor del ÚLTIMO bucle for. La próxima vez, establece boolean b = true
, if equal = true
, no hagas nada, if equal = false
, b=false
.
En segundo lugar, ahora estás comprobando cada valor de array1
con cada valor de array2
. Si he entendido bien, sólo tienes que comprobar los valores en la misma ubicación en la matriz, lo que significa que deberías haber eliminado el segundo bucle for y comprobar así: if (array2[i] == array1[i])
. Entonces tu código debería funcionar también.
Tu código funcionaría así
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;
}
Pero como han dicho otros, más fácil sería: Arrays.equals(ary1,ary2);