Le soluzioni sono molteplici, e non so quante istruzioni conosci, con distinct, basta una riga di codice.
Ma forse visto come hai impostato il codice, ti aiuto con la logica dei due cicli di for nidificati, come hai tentato di fare.
Per capire meglio hai anche bisogno di una seconda matrice dove depositare i numeri non duplicati, per cui oltre a:
int[]A=new int [n];
dichiari anche:
int[]B=new int [n];
il primo dato da mettere in B, è quello in posizione 0, che essendo il primo non è un duplicato
B[0] = A[0];
Ora i due cicli for il primo cicla tutte le le posizioni della matrice A[], e mette a false la variabile: boolean duplicato;
il secondo cicla tutte le posizioni riempite della matrice B[]
per fare questo hai bisogno di un indice che incrementi ogni volta che metti un dato non duplicato in B[]
per cui il confronto avviene in sequenza tra il dato prelevato in A[] e tutti idati in B[] ma senza superare l'indice che ti dice quanti numeri hai immesso in B[].
Se il confronto dice che uno qualsiasi dei dati in B[] è uguale al dato che stai processando prelevato da A[], metti a true la variabile: boolean duplicato; e esci dal ciclo con break;
Alla fine del ciclo di B[], se duplicato == false incrementi l'indice, copi il dato di A[] in B[indice]; e il processo ricomincia con il dato successivo che si trova in A[].
alla fine anche del ciclo di A[], in B[] ci saranno solo numeri non duplicati, che puoi visualizzare come hai gia fatto, l'unica accortezza è non stampare tutti i valori presenti in B[] ma solo quelli da zero a indice.
for (int i = 0; i < indice; i++)
{
System.out.print(B[i] + " ");
}