Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108

    eliminare duplicati in array

    Ragazzi vi posto il codice che ho scritto...
    codice:
    public static void main(String[] args) {
            // TODO code application logic here
            Scanner in = new Scanner(System.in);
        	System.out.print("Numero : ");
        	int n = in.nextInt();
        	
        	String[] parole = new String[n];
        	ArrayList<String> lista = new ArrayList<String>();
        	
        	int i=0;
    	while(i!=n){
                System.out.print("Parola " + i + " : ");
    	    String s = in.next();
    	    parole[i] = s;
    	    lista.add(s);
    	    i++;
    	}
    	
            Set<String> set = new HashSet<String>();
            for(String s : parole) {
                set.add(s);
            }
            
            for(String s : set) {
                System.out.println(s);
            }
        }
    devo controllare se ci sono dei duplicati e stampare il resto dell'elenco cancellando la stringa che si ripete...vi faccio un esempio
    INPUT
    Numero : 4
    Parola 0 : a
    Parola 1 : a
    Parola 2 : c
    Parola 3 : e
    OUTPUT
    e
    c
    a

    il problema è che non vorrei stampare "a" che è il mio duplicato...come posso fare?
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Un'idea:

    Crea un oggetto tipo TreeSet, che, essendo un Set, non ammette duplicati.
    Mentre scorri l'array, fai prima l'inserimento dell'oggetto nel TreeSet e solo se l'inserimento va a buon fine, fai la stampa.

    Il metodo add() di TreeSet ritorna true se l'elemento viene inserito (quindi non era presente), false altrimenti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    codice:
    Set<String> set = new HashSet<String>();
            TreeSet treeSet = new TreeSet();
            for(String s : parole) {
                if(treeSet.add(s))
                    set.add(s);
            }
            
            for(String s : set) {
                System.out.println(s);
            }
    ho provato così...dovrebbe essere esatto...ma mi da sempre anche la lettera "a"

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Eh no, non devi fare prima gli inserimenti e poi le stampe... deve essere contestuale.

    codice:
    Set<String> set = new HashSet<String>();
            TreeSet treeSet = new TreeSet();
            for(String s : parole) {
                if(treeSet.add(s))
                    System.out.println(s);
            }
    PS: se l'add va a buon fine, l'oggetto non era presente ed è stato aggiunto... fare un'altra add è inutile e scorretto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Ho provato eliminando quello che mi hai detto...che era errato...ma non cambia nulla...

    Cioè ovvimente lui elimina il diplicato ma non diciamo l'originale...

    Ho provato anche creando un'ArrrayList che possiede il metodo remove ma poi se mi elimina la lettera non riesce a fare i confronti e da errore...

  6. #6
    Originariamente inviato da GianniMal
    Ho provato anche creando un'ArrrayList che possiede il metodo remove ma poi se mi elimina la lettera non riesce a fare i confronti e da errore...
    Devi utilizzare una struttura in particolare?
    Oppure puoi risolvere il problema come meglio credi?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    No no...il testo dell'esercizio è il seguente:
    Scrivete un programma che legga un numero n, seguito da una sequenza di
    esattamente n stringhe; al termine, deve stampare le stringhe non ripetute.

  8. #8
    Originariamente inviato da GianniMal
    No no...il testo dell'esercizio è il seguente:
    Scrivete un programma che legga un numero n, seguito da una sequenza di
    esattamente n stringhe; al termine, deve stampare le stringhe non ripetute.
    Se vuoi utilizzare un ArrayList:
    per il controllo della presenza o meno di una determinata istanza, puoi utilizzare uno tra questi metodi (prima dell'inserimento dell'oggetto):
    - indexOf
    - contains

    In merito puoi consultare la documentazione relativa alla classe java.util.ArrayList.

    Alternativamente, potresti usare una istanza di java.util.HashSet che ti risparmia il controllo del duplicato.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108
    Grazie anche all'aiuto di LeleFT ho usato HashSet che controlla i duplicati ma quando poi li stampa mi stampa anche l'originale...

    usando i metodi dell'ArrayList devo vedere se contiene, con il metodo contains, o meno l'elemento duplicato ma poi in caso lo contenesse lo devo rimuove dalla lista ma come spiegato prima cancellandolo non riesce a fare gli altri confronti con i rimaneti elementi...

  10. #10
    Originariamente inviato da GianniMal
    usando i metodi dell'ArrayList devo vedere se contiene, con il metodo contains, o meno l'elemento duplicato ma poi in caso lo contenesse lo devo rimuove dalla lista ma come spiegato prima cancellandolo non riesce a fare gli altri confronti con i rimaneti elementi...
    Non devi cancellare un bel niente.
    codice:
             ...
    
            ArrayList<String> lista = new ArrayList<String>();
    	while(i != n){
    	    String s = in.nextLine();
                if( !lista.contains(s) ) // se s non è contenuto, lo inserisco
    	        lista.add(s);
    	    i++;
    	}
    
             // stampi la lista senza duplicati
             for(String s : lista)
                  System.out.println( s );

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.