Upload
martino-cappelli
View
216
Download
0
Embed Size (px)
Citation preview
Primi programmi in JavaPrimi programmi in JavaPrimi programmi in JavaPrimi programmi in Java
Lezione IILezione II
2
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
3
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 eConsoleOutputManager
fanno parte del package prog.io usato SOLO nel corso di teoria per semplificare la
spiegazione.
4
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).
5
HelloWorld
/* Impariamo a usare le classi di Output */
class HelloWorld{
public static void main(String args[]) {
System.out.println(‘‘Hello, world!’’);
}
}
6
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
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
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
8
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...)
9
/* Impariamo a usare le classi di I/O */
import java.util.Scanner;
class HelloWorldEsteso{
}
}
HelloWorldEsteso.java
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);
10
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)
11
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); }
}
12
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.
13
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);
}
}
14
Eseguiamolo!
>>javac AreaRettangoloInterattivo.java
>> java AreaRettangoloInterattivo
5
6
L'area e' 30
>>
15
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.
16
AreaRettangoloAbbellito.javaimport 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);}
}
17
Eseguiamolo!
>>javac AreaRettangoloAbbellito.java>>java AreaRettangoloAbbellitoInserisci la base4Inserisci l'altezza7L'area e' 28
>>
18
Celsius vs. Fahrenheit
Fahrenheit
Celsius
-40
-40
0 40 80 120
-20 0 20 40
fahrenheit =celsius * 9/5 + 32
Provate a implementare un programma che converte dalla scala celsius alla scala fahrenheit.
19
Con
vert
iTem
pera
ture
.java
(nota
te l’in
den
tazi
on
e!!
!!)
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 utentefahrenheit = 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’*/
20
Eseguiamolo!
>> javac ConvertiTemperature.java>>java ConvertiTemperatureInserisci la temperatura in gradi centigradi0La corrispondente temperatura in scala farenheit e' di 32 gradi.>> java ConvertiTemperatureInserisci la temperatura in gradi centigradi37La 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 SwappIntInserisci 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)
22
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!
23
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
24
• 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 3
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).