FONDAMENTI DI INFORMATICA II (Prof

FONDAMENTI DI INFORMATICA – modulo B - 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 una lista (scegliere la migliore implementazione da JCF) tutte le istanze delle chiamate la
cui durata è superiore a 550000 secondi. Non si conosce a priori quanti elementi dovrà contenere la
lista.
4. Stampi a video la dimensione della lista.
Esempio di output a video:
Totale: 1669 chiamate lunghe.
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 class Prova1 {
public static void main(String[] args) {
try {
List array = new ArrayList();
BufferedReader br = new BufferedReader(new FileReader("data.txt"));
String line = br.readLine();
while(line!=null) {
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) array.add(c);
line = br.readLine();
}
System.out.println("Totale: " + array.size() + " chiamate lunghe.");
br.close();
} catch (Exception ex) {
System.out.println("Errore: "+ex);
}
}
}