FONDAMENTI DI INFORMATICA (A+B, e modulo B) (Prof. E. Lamma) – 26 Luglio 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 un metodo main in una classe Prova che:
1. Legga, riga per riga, il file di testo data2.txt. Il file, che rappresenta la lista di chiamate
registrate da un centralino, è così strutturato: ogni riga contiene il numero del chiamante, il
numero del chiamato e la durata della chiamata, separati da “;”.
Esempio del contenuto:
0351 3194181;0341 6859980;33600
0362 6516225;0382 4413043;197760
2. Inserisca i dati letti, riguardanti il chiamante (stringa) e la durata della conversazione (intero), in
una mappa associativa in modo tale che sia possibile effettuare ricerche dato il numero del
chiamante. Nel caso si debba inserire più volte lo stesso numero chiamante, la durata della
chiamata deve essere sommata a quella precedentemente memorizzata. In questo modo la mappa
conterrà, per ogni numero chiamante, la durata totale di tutte le chiamate effettuate.
3. Stampi a video la dimensione della mappa e il numero totale di chiamate effettuate.
Nota.
Per suddividere la stringa letta da file usare il metodo split.
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:
//line è la stringa letta dal file
String[] splitted = line.split(";");
Esempio di output a video:
Totale: 1587 numeri unici su 1867 chiamate.
import java.io.*;
import java.util.*;
public class Prova {
public static void main(String[] args) {
try {
int count = 0;
Map mappa = new HashMap();
BufferedReader br = new BufferedReader(new FileReader("data2.txt"));
String line = br.readLine();
while(line!=null) {
count++;
String[] items = line.split(";");
int duration = Integer.parseInt(items[2]);
Integer value = (Integer)mappa.get(items[0]);
if (value==null) mappa.put(items[0], duration);
else mappa.put(items[0], value+duration);
line = br.readLine();
}
System.out.println("Totale: " + mappa.size() + " numeri unici su "+
count +" chiamate.");
br.close();
} catch (Exception ex) {
System.out.println("Errore: "+ex);
}
}
}