Introduzione a Javalatemar.science.unitn.it/marco/wiki_prog2/images/e/e4/... · 2007. 3. 14. ·...

Post on 21-Sep-2020

3 views 0 download

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