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

    Lettura da più file (quasi) contemporaneamente.

    Ciao a tutti, so già di chiedere più del dovuto probabilmente ma non so davvero dove sbattere la testa.

    Vi lascio il testo d'esame e successivamente quello che ho fatto
    __________________________________________________ __
    parte 1 (Fatta chiaramente)
    Creare una classe denominata Giocatore
    Ogni giocatore è caratterizzato da 4 attributi:
    - nome,- cognome,- ruolo,- squadra
    __________________________________________________ __
    parte 2

    Si costruisca poi una classe CaricatoreGiocatori in grado recuperare le informazioni suigiocatori leggendo i seguenti file:
    - un unico file denominato campionato.dat in cui sono memorizzati i nomi di altri file ditesto.

    Esempio di campionato.dat:
    juventus.dat
    milan.dat
    inter.dat

    Ognuno di tali file corrisponde ad una squadra del campionato.
    - per ognuno dei file relativi ad una squadra, è memorizzata la lista dei giocatori nellaseguente maniera.
    Nella prima riga è memorizzato il nome della squadra.
    Dopodiché, si haun giocatore per ogni riga, i cui valori sono memorizzati nell'ordinenome cognome ruolo
    Avremo dunque tre ulteriori file denominati a punto, juventus.dat, milan.dat e inter.dat

    Esempio di juventus.dat:

    juventus
    GianLuigi Buffon portiere
    Fabio Cannavaro difensore
    MauroGerman Camoranesi centrocampista
    Alessandro DelPiero attaccante

    RICHIESTA DELL'ESERCIZIO:
    CaricatoreGiocatore legge tutti i file nella maniera opportuna, stampa a video l'interasequenza di giocatori, stampando la lista dei portieri, difensori, centrocampisti e attaccanti,indipendentemente dalla squadra del campionato

    ADESSO INSERISCO IL CODICE NEL MESSAGGIO SUCCESSIVO

  2. #2
    codice:
    import java.util.ArrayList;
    import java.util.Scanner;
    import java.io.*;
    
    
    public class CaricatoreGiocatori {
        
        
        public static void main(String[] args) throws
        FileNotFoundException
    
    
        {
            Scanner scanCampionato=new Scanner(new File("campionato.txt"));
            
            while(scanCampionato.hasNextLine()){
                String riga=scanCampionato.nextLine();
                System.out.println(riga);
                
            }
            scanCampionato.close();
        }
            
        }

    A far leggere le cose scritte in un file sono capace, per il resto ho qualche problema

    Vi va di aiutarmi?


    Per esempio, come prima domanda:
    come faccio a fargli capire che la prima riga che legge è un file che deve cercare,aprire e leggere?
    Ultima modifica di LeleFT; 14-12-2016 a 11:32 Motivo: Aggiunti i tag CODE

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    A far leggere le cose scritte in un file sono capace, per il resto ho qualche problema

    Vi va di aiutarmi?
    Innanzitutto, anche se CaricatoreGiocatori è stata intesa (come presumo) dal testo come la classe che contiene tutta la gestione, a partire dal main(), in realtà non dovresti fare TUTTO nel main(). Non dovresti avere un main lungo un kilometro ....

    Come minimo (e ripeto, minimo), dovresti fare metodi separati per le varie gestioni. Ancora meglio sarebbe fare più classi per le varie logiche, ad esempio una classe SOLO per leggere campionato.dat, una classe SOLO per leggere la tipologia di file delle squadre, ecc...
    Ammesso e sperando che questo sia consigliato/accettato dall'esercizio e non proibito per qualche motivo ....

    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    Per esempio, come prima domanda:
    come faccio a fargli capire che la prima riga che legge è un file che deve cercare,aprire e leggere?
    Non c'è da "capire" nulla di particolare. Leggi una riga e per te quella riga è un pathname (relativo o assoluto ... dipende, ma credo che basti "relativo" alla directory corrente) che poi passerai ad un'altra classe di I/O per leggere quel file specifico.

    Ma prima di tutto questo riguardo l'input, dovresti ragionare sulle entità coinvolte, sulle classi che andranno a "modellare" i dati e sulle relazioni tra queste. L'hai fatto??
    Questo viene prima della gestione dei file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Ciao andbin!
    Intanto grazie delle risposte sempre celeri!

    Ieri sera poi non ho avuto tempo di rispondere e stamattina mi sono ributtato sulla traccia.
    Sono arrivato a una soluzione che mi rendo conto essere troppo poco elegante.
    CHiaramente in Giocatore ci sono tutte le caratteristiche indicate nell'esame con i getter & setter.
    Ve la posto:

    (Le prime 10 righe dopo il main sono diventate commento perchè non mi servivano nella soluzione finale)

    codice:
     import java.util.Scanner;
    import java.io.*;
    public class CaricatoreGiocatori {
    
        public static void main(String[] args) throws IOException
        {
            
    /*            String nomeFile="campionato.txt";        
            String riga=" " ;
            Scanner scanCampionato=new Scanner(new File(nomeFile));
    
    
            while(scanCampionato.hasNext())
            {
                riga=scanCampionato.next();
                System.out.println(riga);
            }
            System.out.println("::::::::fine prima parte::::::::");
            ////////////////////////////////
                  
    */
            //ADESSO, LA PRIMA RIGA DI CAMPIONATO(JUVENTUS.TXT) DIVENTA 
            // NUOVOFILE2, CIOè CIò CHE DEVE LEGGERE LO SCANNER.
    
            FileReader fr=new FileReader("campionato.txt");
            BufferedReader br=new BufferedReader(fr);
            String riga2;
            riga2=br.readLine(); //GLI DICO DI LEGGERE LA PRIMA RIGA DI CAMPIONATO(JUVENTUS.TXT
            String nomeFile2=riga2;// E GLI DICO DI MEMORIZZARLA COME NOMEFILE2
            ////////////////////////////////
            String riga3="";
            Scanner scanJuve=new Scanner(new File(nomeFile2));//JUVENTUS.TXT
    
    
            //FINCHè IN JUVENTUS.TXT CI SONO RIGHE DA LEGGERE, LEGGILE E STAMPALE
            scanJuve.nextLine();
            while(scanJuve.hasNextLine())
            {
                riga3=scanJuve.nextLine();
                System.out.println(riga3);
            }
            scanJuve.close();
            ///////////////////////////////
    
            String riga4="";
            riga4=br.readLine(); //GLI DICO DI LEGGERE LA seconda RIGA DI CAMPIONATO(milan.TXT
            String nomeFile3=riga4;// E GLI DICO DI MEMORIZZARLA COME NOMEFILE3
            Scanner scanMilan=new Scanner(new File(nomeFile3));
    
            scanMilan.next();
            while(scanMilan.hasNextLine())
            {
                riga4=scanMilan.nextLine();
                System.out.println(riga4);
            }
            scanMilan.close();
            ///////////////////////////////
            String riga5="";
            riga5=br.readLine(); //GLI DICO DI LEGGERE LA terza RIGA DI CAMPIONATO(inter.TXT
            String nomeFile4=riga5;// E GLI DICO DI MEMORIZZARLA COME NOMEFILE4
            Scanner scanInter=new Scanner(new File(nomeFile4));
    
            scanInter.next();
            while(scanInter.hasNextLine())
            {
                riga5=scanInter.nextLine();
                System.out.println(riga5);
            }
            scanInter.close();
    
    
        }
    }

    Suggerimenti per rendere queste duemila operazioni identiche un pelo più eleganti?
    Ultima modifica di LeleFT; 14-12-2016 a 12:51 Motivo: Aggiunti i tag CODE

  5. #5
    Ciao
    Potresti mettere il codice tra i tag

    [code]
    your code here
    [/code]

    Per renderlo più leggibile e mantenere l'indentazione.

    Grazie.

    Per la tua soluzione basterebbe istanziare un vettore di File e usarlo.

    codice:
    //size=numero elementi nel file campionato.dat
    File[] files=new File[size]
    files[i]=new File(pathname)
    ....
    Ciao.
    Ultima modifica di schumy2000; 14-12-2016 a 11:37
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cicciozza Visualizza il messaggio
    Suggerimenti per rendere queste duemila operazioni identiche un pelo più eleganti?
    Seguire le indicazioni che ho dato prima.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.