Verificar se array 2d contem array 1d java?

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

obrigado!