250 likes | 394 Views
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
E N D
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 fileHelloWorld.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 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 ambienteCLASSPATH).
HelloWorld /* Impariamo a usare le classi di Output */ class HelloWorld{ public static void main(String args[]) { System.out.println(‘‘Hello, world!’’); } }
Salviamo, Compiliamo… • Passo 1: SALVIAMOil 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
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
Eseguiamo! • Passo 3: ESEGUIAMOla 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 -40 0 40 80 120 -40 -20 0 20 40 Celsius Celsius vs. Fahrenheit fahrenheit=celsius* 9/5 + 32 Provate a implementare un programma che converte dalla scala celsius alla scala fahrenheit.
ConvertiTemperature.java (notate l’indentazione!!!!) 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’*/ import java.util.Scanner(); public class ConvertiTemperature { public static void main(String args[]) { } }
Eseguiamolo! >> javac ConvertiTemperature.java >>java ConvertiTemperature Inserisci la temperatura in gradi centigradi 0 La corrispondente temperatura in scala farenheit e' di 32 gradi. >> java ConvertiTemperature Inserisci la temperatura in gradi centigradi 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 • 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 • 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 • 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).