Por exemplo:
int[][] m = { {1,2,3},{4,5,6},{7,8,9}} e int[] x = {4,5,6}
A matriz m contem na linha 1 o array x.Eu gostava de verificar por linhas, mas dá me sempre true.
Eu pensei se na 1 linha, o 1 numero for igual continua a procurar na mesma linha, senao iamos para a linha seguinte.
public static boolean contem(int[][] m,int[] x) {
boolean contem = false;
int a = 0;
for(int i = 0; i < m.length; i++) {
if(m[a][i] == x[i]) {
contem = true;
} else {
a++;
}
}
return contem;
}
Para cada linha da matriz, faça:
- se o tamanho dela é diferente do tamanho de
x
, pode ir pra próxima linha
- percorra os elementos da linha, comparando com o respectivo elemento de
x
, se encontrar um elemento diferente, nem precisa ver o resto, pode ir pra próxima linha
- se todos os elementos da linha são iguais aos de
x
, retorne true
Por fim, se verificou todas as linhas e não achou nenhuma igual a x
, retorne false
.
Ou seja:
public static boolean contem(int[][] m,int[] x) {
for (int[] linha: m) {
// se os tamanhos são diferentes, vai pra próxima linha
if (linha.length != x.length)
continue;
int i;
for (i = 0; i < x.length; i++) {
// se achou um diferente, nem adianta continuar, pode sair desse for
if (linha[i] != x[i])
break;
}
// se o for foi até o fim, é porque todos são iguais
if (i == x.length)
return true;
}
// se chegou aqui é porque não achou uma linha igual a x
return false;
}
Mas claro que isso é só se você quiser fazer na mão, pois para comparar dois arrays, já tem isso pronto, na classe java.util.Arrays
:
public static boolean contem(int[][] m,int[] x) {
for (int[] linha: m) {
// se achou uma linha igual, já pode retornar
if (Arrays.equals(linha, x))
return true;
}
// se chegou aqui é porque não achou uma linha igual a x
return false;
}
1 curtida