SrJustEasy ha scritto:
Il problema sta nell'array booleano chiamato array: quando lo stampo a schermo il risultato è il seguente : [Z@7852e922 Come è possibile? Perché non sono presenti solo valori true e false?
Quando stampi un array ottieni qualcosa di simile a quello che hai postato, una sequenza di caratteri ben poco informativi su dove viene salvato l'array etc.
Ti aspettavi che passando al metodo print() un array venissero stampati gli elementi all'interno ? Se sì forse è perché hai già usato le liste, che ridefiniscono il metodo toString() proprio per ottenere questo comportamento.
Ma ciò non vale appunto per gli array, quindi o cicli tu manualmente sull'array per stampare gli elementi (magari ti crei un tuo metodo che ti formatti la stampa come desideri) o, se vuoi, puoi utilizzare il toString della classe java.util.Arrays.
SrJustEasy ha scritto:
Oltre a questo, ovviamente se avete suggerimenti per una scorciatoia, sono ben accetti.
Grazie
Hai verificato che il codice fornisca il risultato giusto come output? A me non sembra possa funzionare a occhio.
Intanto nel primo ciclo innestato parti da 1, cosa che va bene per il primo elemento per non essere confrontato con sé stesso, ma non va più bene per gli altri elementi. Anche confrontare fino a lunghezza - 1 non è corretto, se il primo e l'ultimo carattere fossero uguali non te ne accorgeresti.
Ma soprattutto, l'errore più grande è che se due caratteri centrali (non il primo o l'ultimo visto gli indici che stai usando) fossero uguali li rimuoveresti tutti e due dal risultato, visto che array conterrebbe true in entrambe le posizioni.
Rivedi bene questa parte!
Per il resto, seguendo sempre il consiglio fornito dalla traccia, puoi comunque rimuovere un ciclo. Il secondo ciclo infatti, quello in cui decrementi lunghezza, è inutile se organizzi un po' meglio il codice.
Nel primo ciclo non ha molto senso incrementare count ad ogni elemento dell'array, lo stai usando solo come indice di "array" (a proposito, usa nomi informativi per le variabili, in questo caso ti converrebbe chiamare il vettore "duplicati" se lo usi per tenere traccia di quali elementi sono ripetuti). Ma come indice di array puoi usare "i", perché il ciclo esterno lo stai facendo per ogni elemento!
Quindi count potresti incrementarlo solo quando trovi un doppione, in questo modo puoi ricavare la lunghezza di risultato semplicemente facendo lunghezza - count.