Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema app. stile social network per esame

    Salve a tutti,
    stavo iniziando ad esercitarmi per un prossimo esame di laboratorio java ed ho trovato un vecchio esame che mi sta facendo scervellare (perchè sono una schiappa)

    Ve lo descrivo più sinteticamente che posso
    ---------------------------------------------------
    Si crei una classe "Utente" con attributi:
    - nome
    - cognome
    - anno di nascita
    - una lista (di lunghezza indefinita) di parole chiave

    Si crei una classe "AnalizzatoreDB" (con main() all'interno) che legga un file di testo .txt per recuperare informazioni e creare N oggetti "Utente"

    Le informazioni sono così formattate:
    nome - cognome - annoNascita - tag1 - tag2 - tag3 - tagx

    All'avvio "AnalizzatoreDB" accetta due parametri: nomefilelista.txt / chiave da ricercare

    Quindi legge il file "nomefilelista.txt" e carica i dati in memoria.
    Stampa a video tutti gli utenti.
    Ricerca "chiave di ricerca" nei vari tag dei vari "Utenti" istanziati.
    Stampa a video il risultato.
    ----------------------------------------------------

    Glom
    Lo so fare in parte ma non capisco come gestire " una lista (di lunghezza indefinita) di parole chiave "

    Qualcuno che mi aiuta?
    Crazie mille

  2. #2
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093

    Re: Problema app. stile social network per esame

    Originariamente inviato da PazZII
    Lo so fare in parte ma non capisco come gestire " una lista (di lunghezza indefinita) di parole chiave "
    non ho ben capito cosa intendi. Una lista di per se non ha limiti nel numero di elementi, puoi aggiungerne all'infinito, le parole chiave poi sono stringhe... hai problemi con una lista di stringhe?


    oppure ti interessa sapere come spezzare una stringa in una lista di stringhe?

  3. #3
    In pratica, visto che sono neofita di java, non so bene come gestire l'oggetto utente e le stringhe stesse.
    Riesco usando il " - " a spezzare le varie parole in ogni riga nel file di testo che identificano l'utente.
    Ma non capisco come gestire questi valori "esplosi" ed assegnarli ad un oggetto "Utente".
    Devo usare arraylist?
    Come funziona?

    Avevo in mente per l'oggetti Utente una cosa tipo

    string Nome;
    string Cognome;
    string annoNascita;
    string Tag; (che sarà un array? o una stringa?)

    Non capisco bene.
    Come lo struttureresti?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da PazZII
    Ma non capisco come gestire questi valori "esplosi" ed assegnarli ad un oggetto "Utente".
    Devo usare arraylist?
    La tua classe avrà dei "campi" (variabili di istanza e oltretutto preferibilmente 'private') che rappresentano nella globalità lo "stato" di un oggetto Utente e cioè contengono appunto le proprietà che hai indicato. Nome e cognome sono chiaramente String, fin qui non c'è dubbio. Per l'anno di nascita sarebbe appropriato un int (o short) (non certo un String). Per i tag si può discutere ... nel senso che bisogna vedere che cosa ci devi poi fare (es. dato un tag devi verificare se è tra quelli dell'utente?): l'alternativa è un List (es. ArrayList) o un Set (es. HashSet). La collezione comunque conterrebbe oggetti String.

    La tua classe Utente potrebbe poi avere un costruttore che riceve tutti i dati e li assegna ai campi. E avrà dei metodi "getter" (es. getNome()) per leggere le proprietà. E se deve essere un oggetto "mutabile" anche i "setter" (es. setNome(String)).

    Visto che la classe Utente contiene una collezione, è anche da valutare e stabilire come permettere l'accesso alla collezione: cioè se "offrire" dei metodi per leggere/settare l'oggetto della collezione in sé oppure se tenere "nascosta" la collezione e non dare la possibilità di cambiarla come oggetto in sé ma solo di poter aggiungere tag (es. addTag()), verificare se contiene un tag (es. hasTag()) ecc...
    Queste sono più che altro questioni di "design" da valutare sempre molto bene.

    E parlando di design c'è ancora la questione di come ottenere un oggetto Utente da una Stringa con la riga dei dati. Sarebbe appropriato fare una classe separata che si occupa di analizzare la stringa, separare/estrarre i dati, parsare in valori numerici dove necessario e costruire un oggetto Utente. Questa classe potrebbe anche essere quella che si occupa di leggere i dati dal file.

    Un'altra possibilità sarebbe quella di mettere un metodo statico in Utente che dato un String con i vari dati, analizza, estrae ecc... e ritorna un oggetto Utente, sollevando apposite eccezioni se i dati sono malformati secondo il formato che hai stabilito.
    Quello sicuramente che devi evitare è di far fare alla classe Utente qualunque gestione dell'I/O. Questa comunque dovresti farla separata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Perfetto,
    valuto, elaboro, provo e mi faccio risentire lunedì/martedì perchè per mercoledì devo saper fare il tutto.
    Non deve comunque essere assolutamente nulla di complicato.
    Non è richiesto nessun setTag(), l'unica difficoltà che ho riscontrato, ed è perchè sono assolutamente nuovo in ambito java, è come far "digerire" all'oggetto Utente i tag.

    Io posso fare una classe che prende i dati da un file di testo.. li controllo, elabora riga per riga e li da in pasto alla classe Utente.
    Tramite costruttore la classe Utente setta nome, cognome, data e... i TAG.
    Bene ho una semplicissima e vergognosa difficoltà nel trattare le stringhe, spezzarle per simbolo (ad esempio in questo caso ogni riga è fatta così -> nome - cognome - annoNascita - tag1 - tag2 - tag3 - tagx, e cioè ogni parola è separata da "-")
    Inoltre non conosco l'arraylist.

    So progettare l'applicazione ma non ho proprio molta conoscenza del linguaggio.
    In PHP non avrei problemi per esempio.

  6. #6
    Per "spezzare per simbolo" una stringa puoi utilizzare il metodo String[] split(String regex) che prende in input un carattere e ti restituisce un array di String contenente tutti gli elementi splittati in base al carattere in input. Poi puoi scorrere l'array con un semplice for e settare tutti gli elementi con i metodi di set.

    Per quanto riguarda la lista "infinita" devi utilizzare, come già è stato detto perfettamente in un post precedente, una delle strutture di Collection. Credo che la migliore sia l'ArrayList
    es. ArrayList<String> lista_tag=new ArrayList<String>();
    puoi aggiungere elementi tramite il metodo add(Object o) e prenderli tramite il metodo
    get(int index).

    http://java.sun.com/j2se/1.4.2/docs/...ArrayList.html

    ciao ciao.
    ------------------------------------
    loro1986
    ------------------------------------

  7. #7
    Perfetto.
    puoi utilizzare il metodo String[] split(String regex) che prende in input un carattere e ti restituisce un array di String contenente tutti gli elementi splittati in base al carattere in input
    Perfetto.. cercavo proprio un qualcosa che splittasse e mettesse semplicemente i risultati in un array.

    Cmq ora provo perchè ho serie difficoltà.
    Grazie per il momento.

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.