0
I have to compare the rows and columns of an array and know if they repeat themselves.
To compare the lines, it was "easy", but I’m picking to compare the columns.
To solve temporarily I am transposing the matrix, ie transforming the rows into columns and columns in row,s to be able to use the same reasoning of row comparison. I would like a more elegant solution, because it seems to gambiarra.
import java.util.Arrays;
public class ValidaLinhasColunas {
public static void main(String[] args) {
// MATRIZ PARA TESTE
// As linhas 0 e 5 sao iguais
// As colunas 1 e 3 sao iguais
int[][] matriz = {{0, 4, 1, 4, 0, 0},
{0, 6, 1, 6, 3, 0},
{0, 3, 1, 3, 0, 8},
{1, 7, 0, 7, 0, 1},
{0, 5, 0, 5, 1, 0},
{0, 4, 1, 4, 0, 0}};
// Vai ser passado em parametro para os metodos
int linhaParaComparar = 0;
int colunaParaComparar = 1;
compararLinhas(matriz, linhaParaComparar);
compararColunas(matriz, colunaParaComparar);
}
/**
* Compara a linhas passada como parametro com as demais da matriz
*
* @param matriz
* @param linhaParaComparar
*/
public static void compararLinhas(int[][] matriz, int linhaParaComparar) {
for (int i = 0; i < matriz.length; i++) {
// Compara linha passada em parametro com as outras da matriz
// (excluindo a passada em paramentro).
if(Arrays.equals(matriz[linhaParaComparar], matriz[i])
&& matriz[linhaParaComparar] != matriz[i]) {
System.out.println("A linha " + linhaParaComparar + " é igual à " + i);
}
}
}
/**
* Compara a coluna passada como parametro com as demais da matriz
*
* MAS ANTES
*
* Transforma as linhas da matriz passada em parametro em colunas e as
* colunas em linhas para efetuar a validacao.
*
* @param matriz
* @param colunaParaComparar
*/
public static void compararColunas(int[][] matriz, int colunaParaComparar) {
// Matriz temporaria tera como quantidade de linhas, a quantidade de colunas
// da matriz passada em parametro. E tera a quantidade de colunas da matriz
// passada em parametro.
int[][] matrizTemp = new int[matriz[0].length][matriz.length];
// Transformando linhas da matriz original em colunas na matriz temporaria
// e colunas da matriz original em linhas na matriz temporaria
for (int i = 0; i < matrizTemp.length; i++) {
for (int j = 0; j < matrizTemp.length; j++) {
matrizTemp[i][j] = matriz[j][i];
//System.out.print(matrizTemp[i][j] + " ");
}
}
// Mesmo processo do método "compararLinhas". Poderia ter sido chamado
// aqui, mas por enquanto mantido assim
for (int i = 0; i < matrizTemp.length; i++) {
if(Arrays.equals(matrizTemp[colunaParaComparar], matrizTemp[i]) && matrizTemp[colunaParaComparar] != matrizTemp[i]) {
System.out.println("A coluna " + colunaParaComparar + " é igual à " + i);
}
}
}
}
Show of reply. Thank you
– pedro_teixeira