FONDAMENTI DI INFORMATICA II - 22 Giugno 2011 PROVA PRATICA – LINGUAGGIO JAVA NOTA PER LA CONSEGNA DEL COMPITO Il compito deve essere stato compilato ed eseguito. E’ importante che tutti i file e le classi si chiamino come richiesto. Nel testo .java (come commento) va indicato il nome dello studente. Esercizio (da realizzare in un UNICO FILE .java) Nella soluzione, prediligere il maggior riutilizzo di codice e la maggiore protezione possibile. Si realizzi una classe Call, con attributi di tipo stringa sender, receiver e di tipo intero start e stop. Tale classe, che rappresenta una singola chiamata telefonica, codifica un metodo costruttore a 4 argomenti e implementa il metodo public int getDuration(). Il metodo restituisce un intero che rappresenta la durata della chiamata che è calcolata come la differenza tra stop e start. Si realizzi poi un metodo main in una classe Prova che: 1. Legga, riga per riga, il file di testo data.txt che è così strutturato: ogni riga contiene il numero del chiamante (sender), il numero del chiamato (receiver), l’istante iniziale della chiamata (start) e quello finale (stop), separati da “;”. Esempio del contenuto: 0351 3194181;0341 6859980;420336000;422142826 0362 6516225;0382 4413043;421977600;422224970 2. Crei, per ogni riga del file, un oggetto Call usando il metodo split per ottenere i 4 valori (sender, receiver, start, stop) da passare al costruttore. Il metodo split suddivide la stringa su cui è invocato in tante stringhe separate in base ad un carattere specificato e le restituisce sotto forma di vettore di oggetti di tipo String. Esempio di codice per ricavare gli attributi dei nuovi oggetti da istanziare: //line è la stringa letta dal file String[] splitted = line.split(";"); String sender = splitted[0]; //esempio del sender int start = Integer.parseInt(splitted[2]); //esempio di start 3. Inserisca in un array V di tre oggetti Call le istanze delle prime tre chiamate lette dal file la cui durata è superiore a 550000 secondi. 4. Stampi a video (usando il metodo toString()) gli elementi dell’array V. Nota. Per stampare le chiamate implementare il metodo toString() della classe Call, come segue: public String toString() { return "Chiamata da " + this.sender + " a " + this.receiver; } import java.io.*; class Call { private String sender; private String receiver; private int start, stop; public Call(String sender, String receiver, int start, int stop) { this.sender = sender; this.receiver = receiver; this.start = start; this.stop = stop; } public int getDuration() { return (this.stop-this.start); } public String toString() { return "Chiamata da " + this.sender + " a " + this.receiver; } } public class Prova { public static void main(String[] args) { Call[] V = new Call[3]; try { BufferedReader br = new BufferedReader(new FileReader("data.txt")); String line = br.readLine(); int i=0; while((line!=null)&&(i<3)) { String[] items = line.split(";"); int start = Integer.parseInt(items[2]); int stop = Integer.parseInt(items[3]); Call c = new Call(items[0], items[1], start, stop); if (c.getDuration()>550000) { V[i] = c; i++; } line = br.readLine(); } br.close(); for(i=0;i<3;i++) System.out.println(V[i]); } catch (Exception ex) { System.out.println("Errore: "+ex); } } }