Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Esercizio sui file

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    5

    Esercizio sui file

    Salve,
    Qualcuno puo' aiutarmi con questo esercizio:
    Scrivere una classe main, col metodo main, che legge da tastiera i nome esterni di due file di testo f1 ed f2, e costruisce separatamente gli insiemi delle parole distinte di f1 ed f2, ordinati secondo il criterio naturale di ordinamento definito dalla classe string. Le parole sono stringhe alfanumeriche inizianti per lettera, e sono separate l'una dall'altra mediante spazi o gli usuali segni di punteggiatura. Il programma deve scrivere su output l'elenco delle parole distinte appartenenti ad f1 ma non ad f2. L'elenco su output deve risultare ordinato per lunghezza crescente di parola e a parita' di lunghezza in ordine alfabetico.

    Specifico che non voglio l'esercizio pronto, vorrei che qualcuno mi aiutasse a capire come faccio a prendere le parole appartenenti ad f1 ma non ad f2, tralasciando la parte di come si opera sui file ecc, quella credo di saperla fare.
    Grazie!
    Ultima modifica di Ramona.; 23-02-2017 a 17:00

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ramona. Visualizza il messaggio
    vorrei che qualcuno mi aiutasse a capire come faccio a prendere le parole appartenenti ad f1 ma non ad f2
    Ignorando alcuni dettagli dell'esercizio, la questione sarebbe semplice: basta mettere le parole di f1 in un Set<String> e le parole di f2 in un altro Set<String>. Possibilmente degli HashSet, per maggior performance. Fai una iterazione sul primo Set, per ciascuna parola la cerchi nel secondo set. Se NON la trovi, hai il tuo risultato: quella parola è da considerare.

    Il testo però dice "gli insiemi delle parole distinte di f1 ed f2, ordinati secondo il criterio naturale di ordinamento definito dalla classe string". In realtà non so per quale motivo è stato chiesto, non essendo fondamentale. Se alla fine l'elenco in uscita deve essere ordinato, si può inserire le parole considerate dentro una lista (e poi ordinarla alla fine di tutto) oppure inserirle già in un TreeSet<String> (che è intrinsecamente ordinato).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    5
    Scusami ma avevo tralasciato parti dell'esercizio, forse per questo non ti trovavi.
    Non sono sicura di aver ben capito, dovrei creare due set<string> e infine un treeSet a cui passare le parole ottenute?
    Inoltre, dovrei passargli un Comparator?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ramona. Visualizza il messaggio
    dovrei creare due set<string> e infine un treeSet a cui passare le parole ottenute?
    È una possibilità. Ma solo una delle soluzioni realizzabili. E comunque devi valutare in base a quello che ti è stato chiesto. Perché per me, avere i due set delle parole da f1 e f2 ordinati alfabeticamente, di per sé non serve a niente. Ma se ti è stato chiesto espressamente un motivo forse (?) c'è.
    Per questo dicevo che basterebbero due HashSet per applicare velocemente la logica ("appartenenti ad f1 ma non ad f2").

    Ma si potrebbe anche fare ben diversamente: per f1 un TreeSet con il Comparator specifico (leggi sotto) e per f2 un HashSet (perché devi cercare velocemente). Iteri sul TreeSet per f1, se trovi la parola nel HashSet per f2, la puoi eliminare dal TreeSet. Alla fine hai già il set risultante e già ordinato come chiesto.

    Insomma, ci sono diversi approcci.

    Quote Originariamente inviata da Ramona. Visualizza il messaggio
    Inoltre, dovrei passargli un Comparator?
    A fronte della precisazione:

    L'elenco su output deve risultare ordinato per lunghezza crescente di parola e a parita' di lunghezza in ordine alfabetico.

    La risposta è , in un qualche modo (o per un TreeSet o per ordinare una lista) devi usare una apposita implementazione di Comparator (scritta da te), perché il criterio di ordinamento è molto particolare: per lunghezza e poi per ordine alfabetico.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    5
    Quote Originariamente inviata da andbin Visualizza il messaggio

    Ma si potrebbe anche fare ben diversamente: per f1 un TreeSet con il Comparator specifico (leggi sotto) e per f2 un HashSet (perch� devi cercare velocemente). Iteri sul TreeSet per f1, se trovi la parola nel HashSet per f2, la puoi eliminare dal TreeSet. Alla fine hai gi� il set risultante e gi� ordinato come chiesto.
    Adottando questa soluzione, devo iterare anche sull' hashset per f2?
    Mi scusi ma fin'ora avevo fatto esercizi con un solo file e anche se dovrebbe essere lo stesso, sto riscontrando difficoltà.
    La ringrazio già per tutto l'aiuto datomi fin'ora.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ramona. Visualizza il messaggio
    Adottando questa soluzione, devo iterare anche sull' hashset per f2?
    No, perché nel set per f2 devi solo determinare (e possibilmente velocemente) se la parola c'è o non c'è. E per questo c'è contains() che in HashSet è veloce.

    Quote Originariamente inviata da Ramona. Visualizza il messaggio
    Mi scusi ma fin'ora avevo fatto esercizi con un solo file
    Nessun problema. P.S. dammi pure del "tu" ... l'importante è che affronti bene queste questioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2015
    Messaggi
    5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, perch� nel set per f2 devi solo determinare (e possibilmente velocemente) se la parola c'� o non c'�. E per questo c'� contains() che in HashSet � veloce.
    L'avevo pensato ma non ne ero sicura.
    Grazie mille, mi sei stato veramente d'aiuto!

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.