Primi programmi in Java Lezione II
Il processo di sviluppo Passo 1: scrivere il programma Software: un qualsiasi text editor Passo 2: compilare il programma Software (Compilatore): Java Development Kit (JDK) Comando: javac HelloWorld.java -> crea il file HelloWorld.class contenente il bytecode della classe Passo 3: eseguire il programma Software (Esecutore): JDK o Java Runtime environment Comando: java HelloWorld -> esegue il bytecode della classe HelloWorld sulla JVM
Un package importante ATTENZIONE! Non useremo MAI le classi Per gestire l’input da tastiera e l’output a video utilizzeremo rispettivamente le classi (fornite nelle Librerie JAVA!!): Scanner (per l’input) System.out (per l’output) ATTENZIONE! Non useremo MAI le classi ConsoleInputManager e ConsoleOutputManager fanno parte del package prog.io usato SOLO nel corso di teoria per semplificare la spiegazione.
Attenzione! RIPETIAMO: I contenuti del package prog.io non fanno parte della distribuzione di Java. Per potervi accedere è necessario: copiare i contenuti del package sul proprio computer (dal CD venduto assieme al libro) in una zona opportuna; modificare alcuni settaggi del sistema (tipicamente la variabile di ambiente CLASSPATH).
HelloWorld /* Impariamo a usare le classi di Output */ class HelloWorld{ public static void main(String args[]) { System.out.println(‘‘Hello, world!’’); }
>>javac HelloWorld.java Salviamo, Compiliamo… Passo 1: SALVIAMO il tutto in un file dal nome HelloWorld.java In generale una classe dal nome NomeClasse (convenzione: lettera iniziale della classe maiuscola!) dovrà essere salvata in un file a se stante con lo stesso nome della classe e estensione “.java”, ovvero un file dal nome: NomeClasse.java Passo 2: COMPILIAMO… (con comando da tastiera al prompt) >>javac HelloWorld.java Il comando da tastiera ha sintassi: javac + PathClasse.java javac è il comando mentre PathClasse.java è il path (assoluto o relativo alla “posizione” da cui lanciate il comando) contenente il codice della classe
>>javac HelloWorld.java Esempi di comandi di compilazione: Se sono nella stessa directory: >>javac HelloWorld.java Se lancio il comando da una directory padre, la cui directory figlia (“SecondaLezione”) contiene il file HelloWorld.java >>javac SecondaLezione\HelloWorld.java Se voglio usare il path assoluto (indipendentemente da dove io mi trovi ) >>javac c:\...\SecondaLezione\HelloWorld.java Se tutto va bene avremo nella stessa directory un file che contiene il bytecode della classe; tale file viene creato dal compilatore se non trova errori in compilazione. E’ un file con lo stesso nome della classe e estensione “.class”, ovvero un file dal nome: NomeClasse.java
>>java HelloWorld Eseguiamo! Passo 3: ESEGUIAMO la classe HelloWorld (con comando da tastiera al prompt) >>java HelloWorld Il comando da tastiera ha sintassi: java + PathClasse java è il comando mentre PathClasse è il path (assoluto o relativo alla “posizione” da cui lanciate il comando) contenente il codice della classe Otterremo il seguente output: >>java HelloWorld (comando d’esecuzione) Hello, world! (output della classe) >> (prompt/shell in attesa di nuovi comandi...)
HelloWorldEsteso.java /* Impariamo a usare le classi di I/O */ import java.util.Scanner; class HelloWorldEsteso{ } public static void main(String args[]){ Scanner in = new Scanner(System.in); System.out.println(‘‘Which day is today?’’); String tod=in.nextLine(); System.out.println(‘‘Hello, world!’’); System.out.print(‘‘Today is...’’); System.out.println(tod);
Salviamo, Compiliamo ed Eseguiamo! Ora Salviamo il tutto in un file dal nome HelloWorldEsteso.java COMPILIAMO… (con comando da tastiera al prompt) >>javac HelloWorldEsteso.java ESEGUIAMO… (con comando da tastiera al prompt) >>java HelloWorldEsteso Otterremo il seguente output: >>java HelloWorldEsteso (eseguiamo..) Which day is today? (output del programma) Monday (input dell’utente) Today is...Monday (output del programma) >> (prompt in attesa di nuovi comandi)
AreaRettangolo.java /* AreaRettangolo calcola l’area di un rettangolo */ public class AreaRettangolo { public static void main(String args[]) { int base=3; int altezza=4; System.out.print("L’area e’ "); System.out.println(base*altezza); }
Salviamo, Compiliamo ed Eseguiamo! >>javac AreaRettangolo.java >>java AreaRettangolo L’area e’ 12 >> Interattività Un programma come AreaRettangolo sarebbe più utile se, invece di assegnare valori fissati a base e altezza, permettesse all’utente di specificarli a ogni esecuzione. Per fare questo è necessario introdurre dei comandi che permettano di ricevere questo input dalla tastiera.
AreaRettangoloInterattivo.java import java.util.Scanner; //NON DIMENTICARLO!! public class AreaRettangoloInterattivo { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int base=sc.nextInt(); int altezza=sc.nextInt(); System.out.print("L’area e’ "); System.out.println(base*altezza); }
Eseguiamolo! >>javac AreaRettangoloInterattivo.java >> java AreaRettangoloInterattivo 5 6 L'area e' 30 >>
Abbellimenti In questo caso l’esecuzione del programma parte senza dare alcuna indicazione del fatto che il programma attende un’azione dell’utente (l’immissione di base e altezza) E’ opportuno segnalare questo fatto all’utente tramite degli output esplicativi Provate VOI a implementare il programma SENZA guardare la soluzione alla slide seguente.
AreaRettangoloAbbellito.java import java.util.Scanner; public class AreaRettangoloAbbellito { public static void main(String args[]) { Scanner tastiera = new Scanner(System.in); System.out.println("Inserisci la base"); int base=tastiera.nextInt(); System.out.println("Inserisci l’altezza"); int altezza=tastiera.readInt();//UPSI! errorino… System.out.print("L’area e’ "); System.out.println(base*altezza); }
Eseguiamolo! >>javac AreaRettangoloAbbellito.java >>java AreaRettangoloAbbellito Inserisci la base 4 Inserisci l'altezza 7 L'area e' 28 >>
fahrenheit =celsius * 9/5 + 32 Celsius vs. Fahrenheit Fahrenheit Celsius -40 40 80 120 -20 20 fahrenheit =celsius * 9/5 + 32 Provate a implementare un programma che converte dalla scala celsius alla scala fahrenheit.
ConvertiTemperature.java (notate l’indentazione!!!!) import java.util.Scanner(); public class ConvertiTemperature { public static void main(String args[]) { } Scanner in = new Scanner(); int celsius,fahrenheit; // Stesso tipo! Le dichiaro insieme! System.out.print(“Inserisci”); /*Giochiamo con l’output */ System.out.print(“ la ”); System.out.print(“ temperatura in grad”); System.out.println(“i centigradi”); celsius = in.nextInt(); //lettura input utente fahrenheit = celsius *9/5 +32; /*conversione del valore inserito in fahrenheit*/ System.out.print(“La corrispondente temperatura in scala fahrenheit e’ di ”); System.out.print(fahrenheit); System.out.println(“ gradi.”); /*Calcolatelo su calcolatrice e poi eseguite…la conversione e’ esatta?? Perche’*/ ConvertiTemperature.java (notate l’indentazione!!!!)
Eseguiamolo! >> javac ConvertiTemperature.java >>java ConvertiTemperature Inserisci la temperatura in gradi centigradi La corrispondente temperatura in scala farenheit e' di 32 gradi. >> java ConvertiTemperature 37 La corrispondente temperatura in scala farenheit e' di 98 gradi. >>
Esercizio 0-CONSIGLIO: FATELO! Realizzare un programma SwappInt che chieda l’iserimento di due valori interi, li salvi in due variabili x e y e: Stampi il valore assegnato a x e y Scambi i valori, ovvero inserisca in x il valore di y e viceversa Stampi il nuovo valore di x e y L’output dovra’ essere del tipo: >>java SwappInt Inserisci il valore di x (output programma) 7 (input utente) Inserisci il valore di y (output programma) 3 (input utente) Valori inseriti: x=7 e y=3 (output programma) Swap dei valori di x e y… (output programma) Valori dopo lo swap: x=3 e y=7 (output programma)
Esercizio 1 Numeri reali Realizzare un programma AltezzaRettangoloInterattivo che legga l'area e la base di un rettangolo, e ne calcoli e stampi l'altezza. Verificare come si comporta il programma quando l'area inserita non è un multiplo esatto della base; quando viene immesso 0 come valore per la base. Numeri reali Scrivete un programma che richiede all’utente di immettere il raggio di un cerchio, e calcola e stampa la sua area Per risolvere questo problema è necessario avere capito come trattare i numeri con la virgola. Se vi trovate in difficoltà, chiedete aiuto ai docenti!
Esercizio 2a Esercizio 2b Scrivere un programma ConvertiDaFahrenheitACelsius che realizzi la conversione dalla scala Fahrenheit alla scala celsius Scrivere un programma ConvertiDaKilometriAMiglia che realizzi la conversione tra kilometri e miglia, tenuto conto del fatto che un miglio equivale a 1.61 kilometri. Esercizio 2b
Esercizio 3 |-----------| | unNome | | unCognome | Scrivere un programma CentraNomi che stampi a video il vostro nome e cognome centrandoli in un rettangolo di dimensioni opportune, costruito utilizzando i simboli - e |. Ad esempio |-----------| | unNome | | unCognome | Attenzione! Questo programma non deve accettare alcun input da tastiera: i vostri nomi devono essere scritti direttamente nel sorgente JAVA.
Esercizio 4 Scrivere un programma che: chieda l’inserimento delle età dei vostri genitori (utilizzerà le classi Scanner e System.out per i comandi di I\O). calcoli e stampi la somma e la media delle età. calcoli e stampi la somma (e la media) delle età che i genitori avevano n anni fa (dove il valore della variabile n è chiesto all’utente).