To walk through an array you need a for
within a for
, so a possible solution is to go through the array and compare each element by traversing the array. So you will have 4% of nested% s, the two outermost ones are traversing the array for the first time, and the two innermost are picking up the outer iteration element of the array and comparing element to element of the internal iteration. p>
To increase the performance of your comparison, the two most internal% s do not have to start from the for
element, the iteration can start from the current element of the outermost iteration. When finding a repeated element you store this value in a for
and continue the outermost iteration.
So:
import java.util.ArrayList;
import java.util.List;
public class Matriz {
public static void main(String[] args) {
int[][] matriz = new int[][]{
{1,2,3,4},
{3,4,5,6},
{6,7,8,9}};
List<Integer> repetidos = new ArrayList<Integer>();
//percorre a matriz, elemento por elemento
for(int i=0; i<matriz.length; i++) {
proximoElemento:
for(int j=0; j<matriz[i].length; j++) {
//caso elemento já foi marcado como repetido
//continua para a próxima iteração
if(repetidos.contains(matriz[i][j])) continue proximoElemento;
//percorre novamente a matriz, elemento por elemento
//começando do elemento atual da iteração mais externa
for(int i2=i; i2<matriz.length; i2++) {
for(int j2=0; j2<matriz[i2].length; j2++) {
//não se compara com ele mesmo
if(i==i2 && j==j2) break;
//achamos um repetido, armazena e
//continua para a próxima iteração
if(matriz[i][j] == matriz[i2][j2]) {
repetidos.add(matriz[i][j]);
continue proximoElemento;
}
}
}
}
}
//exibe os elementos encontrados repetidos ao menos uma vez
for(int r: repetidos) {
System.out.println(r);
}
}
}
Result:
3
4
6
Example on Ideone