Introduzione a Javalatemar.science.unitn.it/marco/wiki_prog2/images/e/e4/... · 2007. 3. 14. ·...
Transcript of Introduzione a Javalatemar.science.unitn.it/marco/wiki_prog2/images/e/e4/... · 2007. 3. 14. ·...
Introduzione a Java e all'ambiente di sviluppo
Programmazione 2, a.a. 2006-2007
Nota: per esclusivo uso interno al corso, riferimenti bibliografici forniti a lezione
Programmazione 2, esercitazione 1 2
Schema minimo di un’applicazione
public class Hello {public static void main(String args[]){
Hello test1 = new Hello();}Hello(){
// in questo blocco vanno scritte le istruzioni
System.out.println(“Hello!”);}
}
Programmazione 2, esercitazione 1 3
Tipi di dati
Definiscono i metodi di memorizzazione dei dati disponibili per rappresentare le informazioni e il modo in cui queste sono interpretate. Sono strettamente connessi alla memorizzazione delle variabili, infatti determinano il modo in cui il compilatore interpreta il contenuto della memoria.
Per creare una variabile in memoria, dobbiamo dichiararla specificandone un identificatore e il tipo:
Tipo idenditificatore [, identificatore];
Programmazione 2, esercitazione 1 4
Dichiarazione di variabili
double salario;int i,j;char carattereFinale;boolean trovato;int matrice[][];String titolo;
Programmazione 2, esercitazione 1 5
Dichiarazione di una variabile
double salario;int i,j;char carattereFinale;boolean trovato;int matrice[][];String titolo;
tipo della variabile
Programmazione 2, esercitazione 1 6
Dichiarazione di una variabile
double salario;int i,j;char carattereFinale;boolean trovato;int matrice[][];String titolo;
I nomi (identificatori) delle variabili sono di lunghezza arbitraria, devono iniziare con una lettera (o con il carattere _) e possono contenere caratteri alfanumerici.Non possono essere delle parole-chiave del linguaggio.
nome della variabile
Programmazione 2, esercitazione 1 7
Keywords
In Java sono parole riservate (o parole-chiave):
abstract continue for new switchassert default goto package synchronizedboolean do if private thisbreak double implements protected throwbyte else import public throwscase enum instanceof return transientcatch extends int short trychar final interface static voidclass finally long strictfp volatileconst float native super while
Programmazione 2, esercitazione 1 8
Dichiarazione di una variabile
double salario;int i,j;char carattereFinale;boolean trovato;int matrice[][];String titolo;
tipi di dato semplici (o primitivi)
Programmazione 2, esercitazione 1 9
Dichiarazione di una variabile
double salario;int i,j;char carattereFinale;boolean trovato;int matrice[][];String titolo;
tipi di dato composti
Programmazione 2, esercitazione 1 10
Assegnamento di un valore ad una variabile
salario = 1500.00;i = 4;carattereFinale = ‘L’;trovato = false;
Programmazione 2, esercitazione 1 11
Tipi di dati primitivi
26.77e364 bitdouble
87.363F32 bitfloat
8834L[-2^63, +2^63-1]64 bitlong
187[-2^31, +2^31-1]32 bitint
8[-2^15, +2^15-1]16 bitshort
3[-128, +127]8 bitbyte
‘c’16 bitchar
falsetrue / false-boolean
esempiovaloridimensione
Programmazione 2, esercitazione 1 12
Tipi di dati primitivi
falsetrue / false-boolean
esempiovaloridimensione
boolean a, b, c;a = false;b = !a; //negazione
c = a | b; //valuta sia a che bc = a && !b; //non sempre valuta b
Programmazione 2, esercitazione 1 13
Tipi di dati primitivi
‘c’16 bitchar
esempiovaloridimensione
char aChar;aChar = ‘S’;
char anotherChar = ‘B’;
Programmazione 2, esercitazione 1 14
Tipi di dati primitivi
8834L[-2^63, +2^63-1]64 bitlong
187[-2^31, +2^31-1]32 bitint
8[-2^15, +2^15-1]16 bitshort
3[-128, +127]8 bitbyte
esempiovaloridimensione
//tipi interiint i, j, k;long n = 178L;i = 0; j=++i; k = -j;
k= 512 % 22; //resto della divisione k +=4; // equivale a k=k+4;
Programmazione 2, esercitazione 1 15
Tipi di dati primitivi
26.77e364 bitdouble
87.363F32 bitfloat
esempiovaloridimensione
double a, b;float c;
a = 37.266;b = 37.266D;c = 87.363F;
Programmazione 2, esercitazione 2 16
Array
Un array è una struttura dati che raccoglie una collezione di valori dello stesso tipo. A ciascun valore si accede tramite un indice intero. Esempio: se a è un array di int, a[i] è l’i-esimo intero dell’array.
0 1 2 3 4 5 6 7 8 9
elemento di indice 3
indici
array di lunghezza 10
0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9
elemento di indice 3
indici
array di lunghezza 10
Programmazione 2, esercitazione 2 17
Esempi
int[] vettoreDiInteri;vettoreDiInteri = new int[10];//dereferenziazionevettoreDiInteri[1] = 10;vettoreDiInteri[9] = 27;
Programmazione 2, esercitazione 2 18
Esempi
//scorrere l’array:
for(int i=0; i<a.length; i++) {
a[i] = i+1;
}
char[] gatto = {‘g’,’a’,’t’,’t’,’o’};
int lunghezzaParola = gatto.length;
int[] a; int b[]; //dichiaro le variabili a e b
a = new int[60]; //iniz. di un array di 60 int
a[0] = 1; a[59] = 66; //dereferenziazione
a[60] = 90; // errore in fase di esecuzione
// (in questo caso gli indici vanno da 0 a 59)
Programmazione 2, esercitazione 2 19
Esempi
int[] vettoreDiInteri2 = vettoreDiInteri;
Programmazione 2, esercitazione 2 20
Esempi
int[] primi = { 2,3,5,7,11,13 };
//assegnamento:
int[] numeriFortunati = primi;
numeriFortunati[3] = 8; //attenzione, che valore ha
//primi[3]?
entrambe le variabili,
primi e numeriFortunati,
fanno riferimento
allo stesso array
Programmazione 2, esercitazione 1 21
Blocchi e visibilità delle variabili
Un blocco di istruzioni è una lista di istruzioni racchiusa tra parentesi graffe. I blocchi definiscono lo scope delle variabili.Lo scope (o ambito di visibilità) di una variabile è la sezione di codice in cui il nome di una variabile può essere utilizzato. Esempi:
public static void main(String[] args) { int n; ... { int k; ... } //k non sarà più visibile }
Programmazione 2, esercitazione 1 22
Blocchi e visibilità delle variabili
Un blocco di istruzioni è una lista di istruzioni racchiusa tra parentesi graffe. I blocchi definiscono lo scope delle variabili.Lo scope (o ambito di visibilità) di una variabile è la sezione di codice in cui il nome di una variabile può essere utilizzato. Esempi:
public static void main(String[] args) { int n; ... { int k; int n; //errore!! variabile già definita } }
Programmazione 2, esercitazione 1 23
Definizione di un metodo
tipo_restituito nomeMetodo( argomenti ){
// istruzioni}
un metodo è univocamente identificato dal nome e dal tipo e numero degli argomenti (firma del metodo). Sono due metodi differenti:
public int max(int a, int b, int c){ ... }public int max(double a, double b){ ... }
max(3,5,99); // invoca il primomax(3.0, 99.0); //invoca il secondo
Programmazione 2, esercitazione 1 24
Strutture di controllo
Costrutti iterativi:- ciclo for- ciclo while - ciclo do .. while
Costrutti condizionali:- if .. else- switch
Programmazione 2, esercitazione 1 25
Costrutti iterativi: for
I cicli for costituiscono uno strumento per ripetere una sezione di codice per un determinato numero di volte (finché una certa condizione è vera).
for (EspressioneInizializzazione; CondizioneCiclo; EspressioneIncremento)
Istruzione;
ciascuna delle istruzioni: inizializzazione, istruzione booleana e passo può essere vuota, es:
for ( ; ; ) { // infinite loop
...
}
Programmazione 2, esercitazione 1 26
Esempio
public class Countdown {
public static void main(String[] args) { new Countdown ();}
Countdown(){
contaAllaRovesciaDa(10);
}
public void contaAllaRovesciaDa(int n){
for (int i = n; i >= 0; i--) {
// stampo i
System.out.println(“Counting down: “ + i);
}
}
}
Programmazione 2, esercitazione 1 27
Esempio
public class ForDemo {
public static void main(String[] args) { new ForDemo();}
ForDemo(){
for (int i = 0, j=3; i <= 5; i++, j-=2) {
System.out.println(i + “ “ + j);
}
}
}
Esercizio: scrivere un’applicazione che stampi il prodotto dei primi n numeri naturali, dove n è un numero intero positivo.
Esercizio: scrivere un’applicazione che stampi la tavola pitagorica delle tabelline da 1 ad un numero n, dove n è un numero intero positivo.
Programmazione 2, esercitazione 2 28
Esercizio
Scrivere un metodo che, preso come parametro un array di caratteri, ne stampi a video l’eco, diminuendo ogni volta la lunghezza della parola. Scrivere un’applicazione che invochi il metodo.
>java Eco ParolaParolParoParPaP
Programmazione 2, esercitazione 1 29
Costrutti iterativi: while e do…while
while (condizione) { // istruzioni }
do { // istruzioni } while (condizione) ;
Programmazione 2, esercitazione 1 30
Costrutti iterativi: while
public class WhileDemo { public static void main(String[] args) { new WhileDemo();} WhileDemo(){ double ammontare, rata, goal, interestRate; // ... int years = 0; while (ammontare < goal) { ammontare += rata; double interesse = ammontare * interestRate / 100; ammontare += interesse; years++; } System.out.println(“Anni totali: ” + years); } }
Programmazione 2, esercitazione 1 31
Costrutti iterativi: do, whilepublic class DoWhileDemo {
public static void main(String[] args) { new DoWhileDemo(); }
DoWhileDemo(){
double ammontare, rata, interestRate;
// ...
int years = 0; int totalYears = 8;
do {
ammontare += rata;
double interesse = ammontare * interestRate / 100;
ammontare += interesse;
years++;
} while (years < totalYears);
System.out.println( “Dopo ”+totalYears+”anni : ”+ ammontare);
}
}
Programmazione 2, esercitazione 1 32
Esercizi
Esercizio: scrivere un’applicazione che calcoli la differenza tra un numero intero n ed il primo intero > n che sia contemporaneamente divisibile per 9, multiplo di 5 e che, diviso per 7 non dia resto 3. Risolvere l’esercizio definendo ed utilizzando degli opportuni metodi.
Esercizio: riscrivere l’esercizio di pagina 27 utilizzando il costrutto while al posto del costrutto for.
Esercizio: modificare l’esercizio di pagina 30 in modo da considerare rate mensili e calcolo dell’interesse semestrale.
Programmazione 2, esercitazione 2 33
if .. else
I costrutti condizionali permettono di specificare una sezione di codice che va eseguita solo in particolari condizioni.
if (espressioneCondizionale) {
//istruzioni
}
Programmazione 2, esercitazione 2 34
if .. else
I costrutti condizionali permettono di specificare una sezione di codice che va eseguita solo in particolari condizioni.
if (espressioneCondizionale) {
//istruzioni
}
else {
//istruzioni
}
Programmazione 2, esercitazione 2 35
if .. else
I costrutti condizionali permettono di specificare una sezione di codice che va eseguita solo in particolari condizioni.if (espressioneCondizionale) {
//istruzioni
}
else if (altraEspressioneCondizionale) {
//istruzioni
} // ...
else {
//istruzioni
}
Programmazione 2, esercitazione 2 36
Costrutti condizionali: if, elsepublic class IfElseDemo {
public static void main(String[] args) { new IfElseDemo(); }
IfElseDemo(){
int punteggio = 76;
char voto;
if (punteggio >= 90) { voto = 'A'; }
else if (punteggio >= 80) { voto = 'B'; } // ...
else { voto = 'F'; }
System.out.println(“Voto = " + voto);
System.out.print(“Il punteggio e’ ");
System.out.println( punteggio<60 ? “basso” : “alto”);
}
}
Programmazione 2, esercitazione 2 37
Costrutti condizionali: if, elsepublic class IfElseDemo {
public static void main(String[] args) { new IfElseDemo(); }
IfElseDemo(){
int punteggio = 76;
char voto;
if (punteggio >= 90) { voto = 'A'; }
else if (punteggio >= 80) { voto = 'B'; } // ...
else { voto = 'F'; }
System.out.println(“Voto = " + voto);
System.out.print(“Il punteggio e’ ");
System.out.println( punteggio<60 ? “basso” : “alto”);
}
}
espressione condizionale: l’operatore ? permette di rendere
condizionale l’assegnamento di un valore
Programmazione 2, esercitazione 2 38
Costrutti condizionali: switchpublic class SwitchDemo {
public static void main(String[] args) { new SwitchDemo(); }
SwitchDemo(){
stampaMese(3); stampaMese(5);
}
public void stampaMese(int mese){
switch (mese) {
case 1: System.out.println(“Gennaio"); break;
case 2: System.out.println(“Febbraio"); break;
…
default: System.out.println(“mese non valido!”);
}
} }
Programmazione 2, esercitazione 1 39
Gestione dei file sorgente (.java) e bytecode (.class)
Gerarchia di directory:
package it.unitn.prog2;
public class ForDemo{ //...}
Programmazione 2, esercitazione 2 40
Passaggio di parametri alla riga di comando
Sono delle stringhe di testo passate al programma in fase di esecuzione tramite la riga di comando. Vengono passati come parametri al metodo main:
public class SimpleEcho {public static void main (String[] args){
if(args.length>0)System.out.println(args[0]);
}} >java SimpleEcho Parola
Parola>
Programmazione 2, esercitazione 2 41
Esercizi
•Scrivere un metodo che prenda 2 parametri: un array di caratteri e un carattere e torni il numero di occorrenze del carattere nell’array.•Scrivere un metodo che prenda come parametro un array di caratteri e ritorni il carattere che compare il maggior numero di volte; utilizzare il metodo definito sopra.•Scrivere un metodo che, preso come parametro un array di double, ne calcoli e restituisca la media aritmetica.•Scrivere un metodo che calcoli il prodotto degli elementi presenti sulla diagonale di una matrice quadrata.
Scrivere un’applicazione che testi questi metodi. Dare all’utente la possibilità di scegliere quale metodo vuole testare utilizzando i parametri passati alla riga di comando.
Programmazione 2, esercitazione 2 42
Ambiente di sviluppo: Borland JBuilder2005
Come avviare l'applicativoCome creare un progettoEsercizio
Programmazione 2, esercitazione 1 43
Approfondimenti
Language Basicssul Java Tutorial della SUN:
http ://java.sun.com/docs/books/ tutorial/java/nutsandbolts/index.html