È quello che ho provato a fare. Credo che il codice (fatto malissimo e mi scuso) comunque parli meglio di me:
(la variabile quadrato è una matrice bidimensionale quadrata di interi, con numero righe e numero colonne uguali)
public void controlloNumeriRipetuti()
{
int [] arrayAppoggio=GeneralUtil.creaArray((int)Math.pow(quadrato.length, 2));
Vector<Integer> ripetuti=new Vector<Integer>();
int cella=0;
int minimo=0;
int primoCiclo=0;
//porto tutti i valori della matrice in un array
for(int i=0;i<quadrato.length;i++)
for(int k=0;k<quadrato.length;k++)
{
arrayAppoggio[cella]=quadrato[i][k];
cella++;
}
Arrays.sort(arrayAppoggio);
/*for(int i=0;i<arrayAppoggio.length;i++)
System.out.printf("%d ", arrayAppoggio[i]);*/
for(int i=0;i<quadrato.length;i++)
for(int k=0;k<quadrato.length;k++)
{
if(arrayAppoggio[i]>minimo)
{
if(arrayAppoggio[k]==arrayAppoggio[i])
{
primoCiclo++;
if(primoCiclo>1)
{
ripetuti.add(arrayAppoggio[k]);
primoCiclo=0;
minimo=arrayAppoggio[k];
break;
}
}
}
}
System.out.printf("I numeri ripetuti sono: \n");
for(int i=0;i<ripetuti.size();i++)
{
System.out.println(ripetuti.get(i));
}
}
ho provato innanzitutto a portare i valori della matrice su un array per gestirli meglio.
Poi l'array l'ho ordinato con sort() e se provo a fare la stampa dell'array tutto funziona bene, cioè i valori sono in ordine dal più piccolo al più grande. Il problema che non riesco a trovare stà nell'altra parte di codice.
La variabile primoCiclo l'ho messa in modo tale che quando faccio passare l'array la cella che voglio controllare almeno una volta incontrerà se stessa, ma non è una ripetizione, quindi è x discriminare questo caso, forse l'ho usata male...
help me!!