Poter passare degli argomenti ad un’applicazione è utile in molte occasioni,
in quanto consente di modificarne il comportamento senza dover
necessariamente ricompilare il codice sorgente.
Ad es. un programma che ordina alfabeticamente le righe contenute
in un file, può offrire all’utente la possibilità di eseguire
l’ordinamento in maniera ascendente anziché discendente
semplicemente specificando un opportuno parametro.
Spesso, può essere necessario dover supportare degli argomenti
numerici anziché delle stringhe e in questo caso occorre convertire
l’oggetto String corrispondente nel numero che lo
rappresenta, ad es. la stringa “1234” nel numero 1234.
Per far questo esistono diversi metodi che elencheremo dopo aver
mostrato un esempio, che riporta un programma la cui funzione
è quella di sommare i suoi argomenti, oppure farne media, se il
primo argomento specifica l’opzione “–m”:
/*
* File SommaMedia.java
*/
class SommaMedia
{
public double somma(String addendi[])
{
int i;
double somma = 0.0;
double doubleArg;
for (i = 0; i < addendi.length; i++)
{
try {
doubleArg = Double.parseDouble(addendi[i]);
} catch (NumberFormatException e) {
// Ignora l'argomento
continue;
}
somma += doubleArg;
}
return somma;
}
public double media(String addendi[])
{
double media;
String daSommare[] = new String[addendi.length-1];
System.arraycopy(addendi, 1, daSommare, 0, daSommare.length);
/* Gli argomenti non validi vengono calcolati come aventi
il valore 0
e contribuiscono al calcolo della media */
media = somma(daSommare) / daSommare.length;
return media;
}
public static void main(String args[])
{
double risultato;
SommaMedia sm = new SommaMedia();
if (args.length == 0)
{
System.out.println("Nessun argomento su cui operare");
System.exit(1);
}
if (args[0].equals("-m") & args.length >
1)
risultato = sm.media(args);
else
// Qualsiasi altro parametro diverso da -m viene ignorato
risultato = sm.somma(args);
System.out.println("Il risultato dell'operazione
e' " + risultato);
}
}
Il funzionamento complessivo, anche grazie ai commenti inseriti
nel codice, dovrebbe essere chiaro.
In particolare ci soffermiamo su due nuovi metodi presentati,
evidenziati in grassetto.
All’interno del metodo media() è presente un metodo
molto utile, arraycopy() della classe java.lang.System,
che ha la seguente segnatura:
public static void arraycopy(Object
src,
int src_position,
Object dst,
int dst_position,
int length)
e il cui compito è quello di copiare in ordine un numero length
di elementi di un array src, a partire dalla posizione
src_position, nella posizione dst_position dell’array
di destinazione dst.
Nel nostro caso, lo abbiamo utilizzato per passare alla funzione
somma() il vettore dei parametri passati all’applicazione,
senza l’argomento “-m”.
Il metodo parseDouble() presente nel metodo somma()
viene utilizzato per convertire gli argomenti in numeri di tipo
double, sui quali poter operare aritmeticamente per eseguire
la somma.
Si tratta di un metodo statico della classe java.lang.Double,
ma ne esistono anche altri che permettono la conversione in altri
tipi numerici.
In particolare, tutte le classi che hanno un corrispondente tipo
primitivo in Java (quindi Byte, Character, Double,
Float, Integer, Long e Short) hanno
dei metodi statici che convertono una stringa in un oggetto del
loro tipo o in un valore del loro tipo primitivo, con una segnatura
del tipo:
public static <tipo primitivo> parse<NomeTipoPrimitivo>(String
s)
Tutti questi metodi sollevano un’eccezione del tipo NumberFormatException
se la stringa passata come argomento non è un numero valido.
Con questa lezione terminiamo la prima panoramica sulle applicazioni
Java, delle quali torneremo a discutere quando sarà la volta della
interfacce grafiche.
Con la prossima lezione cominceremo un nuovo capitolo, nel quale
impareremo a scrivere le nostre applet.
Torna all'indice Generale del corso di Corso di Java di Software Planet