Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre
Abbiamo provato Google Pixel 11, il più accessibile della nuova gamma: chip Tensor G6 condiviso con i modelli Pro, fotocamera 48 MP con Magic Capture e Stili Fotografici, display Actua da 3000 nit e batteria da 4985 mAh. Ecco come si comporta nell'uso quotidiano, e cosa cambia davvero rispetto a Pixel 11 Pro e Pro XL
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship
Google Pixel 11 Pro XL debutta in Italia con il nuovo Tensor G6, lo Zoom Pro fino a 120x, il display Super Actua da 3600 nit e la new entry HiLight riservata ai modelli Pro: lo abbiamo provato in anteprima per diversi giorni prima del lancio commerciale, tra fotocamera generativa, ricarica ancora indietro rispetto ai rivali e un prezzo che parte da 1399 euro
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti
Con un semplice dialogo in linguaggio naturale e la potenza di una scheda video di fascia alta è possibile costruire software funzionante da zero, senza scrivere una riga di codice e senza inviare un solo byte dei propri dati a server esterni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-07-2007, 18:25   #1
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
esercizio java videoteca

Salve a tutti,sono nuovo e ho un grosso problema con un esercizio java !!!
Potreste aiutarmi a svolgerlo? L'esercizio è il seguente:

Una videoteca memorizza le informazioni sui titoli disponibili in un file denominato “films.info”. Il file è organizzato in blocchi di righe, uno per ogni film, delimitati dalle stringhe “***inizio***” e “***fine***”. Le prime tre righe contengono il titolo del film e l’anno di produzione. Seguono gli attori protagonisti, in numero variabile, e il regista, secondo il seguente schema:

***inizio***
Titolo Film
Anno Produzione
***attori***
Nome Attore 1
Cognome Attore 1
Nome Attore2
Cognome Attore2

Nome Attore n
Cognome Attore n
***regia***
Nome Regista
Cognome Regista
***fine***

Scrivere un programma che, ricevuti in ingresso Cognome e Nome di un attore e Cognome e Nome di un regista, stampi la lista dei film interpretati dall’attore e diretti dal regista (titolo e anno di produzione).
Vi ringrazio per la vostra attenzione.
Blade86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2007, 19:32   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Postresti iniziare creando una rappresentazione del file "films.info". Intendo per rappresentazione del file un oggetto (in Java una categoria di oggetti, cioè una classe) che faccia da ponte tra i dati contenuti nel file films.info e il resto del sistema. Potrebbe essere una cosa di questo pseudo-tipo:

classe FilmFile
+Collection<Film> getFilms();

Un Film potrebbe essere:

classe Film
+String getTitolo();
+String getAnnoProduzione();
+Regista getRegista();
+Collection<Attore> getAttori();

Un Attore sarebbe:

classe Attore
+String getNome();
+String getCognome();

ed un Regista:

classe Regista
+String getNome();
+String getCognome();


Il sistema potrebbe prevedere l'esistenza di un Archivista a cui deleghi il compito di cercare delle occorrenze in un elenco di film:

classe Archivista
+Collection<Film> cerca(Attore a, Collection<Film> films);
+Collection<Film> cerca(Regista r, Collection<Film> films);

Il programma sarebbe quindi una semplice unione delle definizioni degli oggetti su proposti:

classe Programma:
+void setFilmFile(FilmFile file);
+void setArchivista(Archivista v);
+void cerca(Regista r, Attore a);

Il metodo "cerca" di Programma userebbe l'Archivista sulla collezione di Film nota al FilmFile per ricavare e stampare a video l'elenco di film diretti da r e interpretati da a.

Naturalmente è solo uno dei possibili modelli.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2007, 20:24   #3
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
ok. Ma se vorrei caricare it tutto in un ArrayList tramite i private final String MARCATORE_ .......... = "***.........***; come dovrei fare? e per fare il confronto fra Nome e Cognome attore, e Nome e Cognome regista?
Blade86 è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2007, 20:48   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Una volta che hai un modello che ti dica chi fa cosa, puoi passare ad esaminare il come.

Nel nostro caso, la domanda "e se volessi riempire un ArrayList tramite i marcatori eccetera eccetera", attiene a come faccia FilmFile a restituire la sua collezione di Film.

Altrimenti detto, FilmFile possiede un metodo getFilms() che restituisce un insieme di riferimenti Film ma come fa concretamente a restituire questi Film? Da dove li prende? E come li prende?

Bene. Come potrebbe funzionare il metodo getFilms() di FilmFile. FilmFile potrebbe avere un costruttore che prende come argomento un File. Quel File sarebbe il percorso del file "film.info". Il costruttore di FilmFile passerebbe poi ad analizzare il testo contenuto in quel file. Nota la forma in cui i singoli film, attori e registi sono conservati nel file (e qui possono entrare in gioco i tuoi marcatori di tipo Stringa), FilmFile creerebbe tanti oggetti Film quanti ne esistono nel file passatogli. Questi oggetti potrebbero essere immagazzinati in un ArrayList di Film. E il metodo getFilms() restituirebbe questo ArrayList (ArrayList è un Collection).

La questione del confronto è ancora un "come". Stavolta è "come fa Archivista a trovare tutti i Film che contengono un certo Attore" (metodo cerca(Attore, Collection<Film>)) e "come fa Archivista a trovare tutti i Film che contengono un certo Regista" (metodo cerca(Regista, Collection<Film>)).

La ricerca di un Attore nel metodo cerca(Attore attore, Collection<Film> films) di Archivista potrebbe essere semplicemente:

crea una lista di Film L inizialmente vuota
per ogni Film F nell'insieme films
-per ogni Attore A nell'insieme di attori di F
--se l'attore A coincide con l'attore cercato
---inserisci il film F nella lista L
---passa al prossimo film nell'insieme films
L contiene tutti i film recitati da attore, restituisci L

Idem per il regista.

Quando sarà il momento di cercare i Film di un certo attore, Programma prenderà la collezione di Film posseduta da FilmFile e la passerà al metodo cerca di Archivista insieme all'attore bersaglio. Archivista restituirà l'insieme di Film contenenti quell'attore. Lo stesso vale per il regista. La ricerca combinata attore+regista sarà fatta ottenendo da Archivista l'elenco di film in cui compare il regista e cercando poi in quell'elenco di film i film in cui compaia l'attore desiderato. Non è il modo più efficiente ma è sintetico.

Ti tornano i conti fin qui?
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2007, 21:33   #5
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
si ok. Infatti avevo pensato una cosa del genere, però quando sono andato a caricare gli attori tramite i marcatori nell'ArrayList non me li dà, non potresti dirmi come si fà, io c'ho provato ma non và! in effetti il mio problema è forse quando carico faccio qualche errore. grazie
Blade86 è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2007, 17:08   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In che senso "come si fa"?

Si fa leggendo il file una linea per volta. Oppure lo leggi a blocchi. Prendi uno Scanner, ha un metodo hasNextLine che dice se il file contiene un'altra linea di testo e un metodo nextLine() che ti restituisce la linea di testo successiva.

Il formato è bizzarro ma non è particolarmente complicato.

la prima linea la scarti
la seconda è il titolo
la terza è l'anno di produzione
la quarta la scarti
finchè la linea non vale ***regia***
-la prima è il nome di un attore
-la seconda è il cognome di un attore
questa linea è il nome del regista
questa linea è il cognome del regista
questa linea è ***fine***

Applichi il procedimento finchè ci sono linee e sei a posto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 09:40   #7
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
private final String MARCATORE_ATTORI = "***attori***";
private final String MARCATORE_REGIA = "***regia***";



public void leggi(String file) throws Exception{
Scanner in = new Scanner(new FileReader(file));
Attori b = Attori.read(in);
while (b!=null){


if(in.hasNextLine() && in.nextLine().equals(MARCATORE_ATTORI)) {
while(in.hasNextLine()) {
String linea = in.nextLine();
if(linea.equals(MARCATORE_REGIA)) {
break;
} else {b.aggiungiattori(linea);


}

}
}
s.add(b);
}

il codice l'ho fatto così ma nn và!
Blade86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 11:36   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non va è un po' generico. Genera un'eccezione, non legge correttamente gli attori, li legge ma scarta il regista... tutto è possibile.

Supponendo che Attori.read(Scanner) sia una cosa di questo tipo:

return new Attore(scanner.nextLine(), scanner.nextLine());

mi suona strano il primo:

Attori b = Attori.read(in);

così come il

while(b != null)

L'if lo darei per buono. Se c'è un'altra linea e quella linea vale ***attori*** allora:

prendi una linea.
se la linea vale ***regia*** esci dal ciclo

l'else dovrebbe essere invece:

String nome = linea;
String cognome = in.nextLine();
s.add(new Attore(nome, cognome));
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 13:11   #9
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
Il fatto è : ho un ArrayList<Attore> attori e vorrei caricare la lista degli attori delimitati dai marcatori ***attori*** e ***regia*** nell'ArrayList e poi fare il confronto analizzando quello che c'è nell'ArrayList tramite il for generalizzato. Non è ke potresti postare questa parte del codice grazie!
Blade86 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 13:32   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Io posso anche incollarti il codice ma è difficile integrare una soluzione che è frutto di una visione estranea del problema. Ad esempio si potrebbe fare così:

Codice:
package attoregisti;

import java.util.Collection;
import java.util.LinkedList;

public class FilmData {
    private Regista regista;
    private String titolo;
    private String annoProduzione;
    private LinkedList<Attore> attori = new LinkedList<Attore>();
    
    public boolean validate() {
        return regista != null && titolo != null && annoProduzione != null &&
                attori.size() > 0;
    }
    
    public void addAttore(Attore a) {
        attori.add(a);
    }
    
    public Collection<Attore> getAttori() {
        return attori;
    }

    public Regista getRegista() {
        return regista;
    }

    public void setRegista(Regista regista) {
        this.regista = regista;
    }

    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        this.titolo = titolo;
    }

    public String getAnnoProduzione() {
        return annoProduzione;
    }

    public void setAnnoProduzione(String annoProduzione) {
        this.annoProduzione = annoProduzione;
    }
    
    
}
Codice:
package attoregisti;

import java.io.*;
import java.util.*;

public class FilmFile {
    private LinkedList<Film> films = new LinkedList<Film>();
    
    public FilmFile(File file) throws IOException {
        Scanner in = null;
        try {
            FilmData data = new FilmData();
            in = new Scanner(file);
            while(in.hasNextLine()) {
                in.nextLine(); //***inizio***
                data.setTitolo(in.nextLine());
                data.setAnnoProduzione(in.nextLine());
                String line = in.nextLine();
                while(!(line = in.nextLine()).equals("***regia***")) {
                    String nomeAttore = line;
                    String cognomeAttore = in.nextLine();
                    data.addAttore(new Attore(nomeAttore, cognomeAttore));
                }
                data.setRegista(new Regista(in.nextLine(), in.nextLine()));
                in.nextLine(); //***fine***
                films.add(new Film(data));
                data = new FilmData();
            }
        } finally {
            if(in != null) {
                in.close();
            }
        }
    }
    
    public Collection<Film> getFilms() {
        return films;
    }
}
Una versione più rispondente al formato intuibile, che consideri cioè la divisione del file in blocchi e gestisca eventuali malformazioni, sarebbe:

Codice:
package attoregisti;

import java.util.LinkedList;

public class LineBuffer {
    private int cursor = 0;
    private LinkedList<String> lines = new LinkedList<String>();
    
    public void append(String line) {
        lines.add(line);
    }
    
    public void clear() {
        cursor = 0;
        lines.clear();
    }
    
    public String peekNext() {
        return lines.get(cursor);
    }
    
    public String next() {
        return lines.get(cursor++);
    }
    
    public void skip(int count) {
        cursor += count;
    }
    
    public int remaining() {
        return lines.size() - cursor + 1;
    }
    
    public boolean hasRemaining(int count) {
        return cursor + count <= lines.size();
    }
    
    public boolean hasNext() {
        return cursor < lines.size();
    }
    
    public String toString() {
        StringBuilder buffer = new StringBuilder();
        buffer.append("[chunk start]\n");
        for(String line : lines) {
            buffer.append(line).append("\n");
        }
        buffer.append("[chunk end]");
        return buffer.toString();
    }
}
Codice:
package attoregisti;

import java.util.Scanner;

public class FilmParser {
    
    public FilmData parse(LineBuffer data) throws IllegalFormatException {
        FilmData filmData = new FilmData();
        
        if(!data.hasRemaining(2)) {
            throw new IllegalFormatException(data, "not enough lines for header");
        }
        
        filmData.setTitolo(data.next());
        filmData.setAnnoProduzione(data.next());
        
        if(data.hasNext() && data.peekNext().equals("***attori***")) {
            data.skip(1); //skip actors section identifier
            while(data.hasNext() && !data.peekNext().equals("***regia***")) {
                if(data.hasRemaining(2)) {
                    filmData.addAttore(new Attore(data.next(), data.next()));
                } else {
                    throw new IllegalFormatException(data, "not enough lines for actor");
                }
            }
        }
        
        if(data.peekNext().equals("***regia***")) {
            data.skip(1); //skip director section identifier
            if(data.hasRemaining(2)) {
                filmData.setRegista(new Regista(data.next(), data.next()));
            } else {
                throw new IllegalFormatException(data, "not enough lines for director");
            }
        }
        
        if(filmData.validate()) {
            return filmData;
        } else {
            throw new IllegalFormatException(data, "data is not a valid film chunk");
        }
    }
}
Codice:
package attoregisti;

public class IllegalFormatException extends Exception {
    private LineBuffer chunk;
    
    public IllegalFormatException(LineBuffer chunk, String message) {
        super(message);
        this.chunk = chunk;
    }
    
    public String toString() {
        return getMessage() + "\n" + chunk;
    }
}
Codice:
package attoregisti;

import java.io.*;
import java.util.*;

public class FilmFile {
    private LinkedList<Film> films = new LinkedList<Film>();
    
    public FilmFile(File file) throws IOException {
        final String INIZIO = "***inizio***";
        final String FINE = "***fine***";
        Scanner in = null;
        try {
            in = new Scanner(file);
            FilmParser parser = new FilmParser();
            LineBuffer buffer = new LineBuffer();
            while(in.hasNextLine()) {
                String line = in.nextLine();
                if(line.equals(INIZIO)) {
                    buffer = new LineBuffer();
                } else if(line.equals(FINE)) {
                    try {
                        films.add(new Film(parser.parse(buffer)));
                    } catch(IllegalFormatException ex) {
                        ex.printStackTrace();
                    }
                    buffer.clear();
                } else {
                    buffer.append(line);
                }
            }
        } finally {
            if(in != null) {
                in.close();
            }
        }
    }
    
    public Collection<Film> getFilms() {
        return films;
    }
}
Ma non so quanto possa esserti utile averlo detto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2007, 14:22   #11
Blade86
Member
 
L'Avatar di Blade86
 
Iscritto dal: Jun 2007
Messaggi: 75
non ti preoccupare adesso ho capito di + , ti ringrazio e alla prossima.
Blade86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Google Pixel 11 Pro XL: fotocamera al top, batteria indietro. Luci e ombre del nuovo flagship Google Pixel 11 Pro XL: fotocamera al top, batte...
Non sai programmare? Ecco cosa si può fare con un LLM e una GeForce RTX 5070 Ti Non sai programmare? Ecco cosa si può far...
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Intel svela Crescent Island: 32 core Xe3...
Robot aspirapolvere in offerta su Amazon...
Tesla annuncia l'inaugurazione della nuo...
CPU x86, AMD continua a guadagnare terre...
iPhone 17 Pro a 1.159€ e Pro Max a 1.299...
Il meglio di Amazon in 2 minuti: oggi su...
roborock Qrevo S Pro a 369,99€: super ri...
Windows, l'aggiornamento .NET di agosto ...
Apple AirTag a soli 26€: raggio più gran...
iPhone 17 Pro a 1.159€ (-180€ rispetto a...
256 core, 1,28 GB di cache e 128 linee P...
Microsoft propone un rimedio temporaneo ...
I 5 portatili da comprare su Amazon: dal...
Vuoi costruire un cyberdeck? Raspberry p...
SpaceX: Ship 41 ha eseguito due static f...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:24.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v