Basi di Java Strutture base di Java Basi di java ▪ Variabili ▪ Operatori ▪ Condizioni e Cicli ▪ Array Variabili Cosa è una variabile ? ▪ Una variabile è una casella di memoria identificata da un nome ▪ Il suo scopo è di contenere un valore di un certo tipo. Serve per memorizzare dati durante l’esecuzione di un programma. ▪ Il nome di una variabile (come il nome di una classe o di un metodo) è un identificatore. Può essere costituito da lettere, numeri e underscore (esempi: num1, i, risultato, costo_tot, ...) Non deve coincidere con una parola chiave del linguaggio (esempi “sbagliati”: class, static, int, …) È bene che sia significativo per il programma (meglio base, altezza e area di X1, X2 e X3) Variabili in Java In Java ogni variabile deve essere dichiarata prima del suo uso Nella dichiarazione di una variabile se ne specifica il nome e il tipo (o meglio, il tipo dei valori che pu`o contenere) ATTENZIONE! Ogni variabile deve essere dichiarata UNA SOLA VOLTA (la prima volta che compare nel programma) Tipi primitivi Tipi Interi int numeroIntero; // 4 bytes –2,147,483,648 to 2,147,483, 647 (just over 2 billion) short numeroInteroPiccolo; // 2 bytes –32,768 to 32,767 long numeroInteroGrande; // 8 bytes –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 byte numeroInteroPiccoloPiccolo; // 1 byte –128 to 127 Tipi a virgola mobile float virgolaMobileSingolaPrecisione; // 4 bytes approximately // ±3.40282347E+38F (6–7 significant decimal digits) double virgolaMobileDoppiaPrecisione; // 8 bytes approximately // ±1.79769313486231570E+308 (15 significant digits) char singoloCarattere; // 'u' boolean miPiaceQuestoPost; // true o false package ict.primoprogetto; Assegnamento public class AreaTriangolo { public static void main(String[] args) { int base, altezza; int area; base = 5; altezza = 10; area = base * altezza / 2; System.out.println(area); } } Si può memorizzare un valore in una variabile tramite l’operazione di assegnamento Il valore da assegnare a una variabile può essere un letterale o il risultato della valutazione di un’espressione Dall’ esempio si può notare che le variabili possono essere usate anche all’interno di espressioni. I valori di base e altezza vengono letti e usati nell’espressione Il risultato dell’espressione viene scritto nella variabile area Come vediamo la variabile può essere inizializzata contestualmente alla sua dichiarazione. Inizializzazione Dichiarazione+assegamento Si pu`o combinare dichiarazione e assegnamento (dichiarazione con inizializzazione). Costanti Nella dichiarazione delle variabili che NON DEVONO mai cambiare valore si può utilizzare il modificatore final Costanti Il compilatore si occuperà di controllare che il valore delle costanti non venga mai modificato (riassegnato) dopo essere stato inizializzato. Aggiungere il modificatore final non cambia funzionamento programma... ma serve a prevenire errori di programmazione Operatori Cosa è un operatore ? In informatica e programmazione, un operatore è un simbolo che specifica quale legge applicare a uno o più operandi, per generare un risultato. ▪ gli operatori unari lavorano su un singolo operando. Esempi di operatori unari sono quelli di incremento e decremento (vedi sezione seguente); ▪ gli operatori binari lavorano su due operandi: ne sono esempi gli operatori aritmetici e quelli di assegnamento; ▪ gli operatori ternari lavorano su tre operandi; uno dei rari esempi è l'operatore condizionale, usato in programmazione. Principali Operatori Java Operazioni Aritmetiche L’operazione di divisione / si comporta diversamente a seconda che sia applicato a letterali interi o frazionari ▪ 25/2 = 12 (divisione intera) ▪ 25%2 = 1 (resto della divisione intera) ▪ 25.0/2.0 = 12.5 (divisione reale) 25.0%2.0 = 1.0 (resto della divisione intera) Una operazione tra un letterale intero e un frazionario viene eseguita come tra due frazionari 25/2.0 = 12.5 ATTENZIONE AGLI ERRORI 1.5 + (25/2) = 13.5 (attenzione all’ordine di esecuzione delle operazioni) ERRORE 1.5+(25.0/2.0) = 14.0 Operatori relazionali JAVA package ict.primoprogetto; public class Bisestile { public static void main(String[] args) { int anno = 1900; boolean èBisestile; // divisible per 4 ma non per 100 èBisestile = (anno % 4 == 0) && (anno % 100 != 0); //O è divisibile per 400 èBisestile = èBisestile || (anno % 400 == 0); System.out.println("E' bisestile ?"+èBisestile); } } Condizioni e Cicli Sequenza Esecuzione in sequenza delle operazioni sulle variabili inizializzate Alternativa • Inizializzazione: assegnazione dei valori iniziali alle variabili caratteristiche del ciclo (viene eseguita una sola volta); • Corpo: esecuzione delle istruzioni fondamentali del ciclo che devono essere eseguite in modo ripetitivo; • Modifica: modifica dei valori delle variabili che controllano l'esecuzione del ciclo (eseguito ad ogni iterazione); • Controllo: determina, in base al valore delle variabili che controllano l'esecuzione del ciclo se il ciclo deve essere ripetuto o meno Iterazione Iterazione o Ripetizione Esprime la ripetizione di una sequenza di istruzioni. Nel caso piu` generale (ripetizione enumerativa), Iterazione • Inizializzazione: assegnazione dei valori iniziali alle variabili caratteristiche del ciclo (viene eseguita una sola volta); • Corpo: esecuzione delle istruzioni fondamentali del ciclo che devono essere eseguite in modo ripetitivo; • Modifica: modifica dei valori delle variabili che controllano l'esecuzione del ciclo (eseguito ad ogni iterazione); • Controllo: determina, in base al valore delle variabili che controllano l'esecuzione del ciclo se il ciclo deve essere ripetuto o meno. Istruzioni condizionali Un’istruzione condizionale if-else ha questa forma: if (...condizione...) ...comando... else ...comando... dove: La condizione è detta anche guardia dell’if If….. else…. ▪ La guardia può essere vera (true) o falsa (false) In un programma spesso c’e’ bisogno di scegliere tra operazioni diverse ▪ I due comandi alternativi sono detti anche rami Il ramo else è opzionale (vedremo) Per questo esiste l’istruzione condizionale if-else Condizioni in Java public class Lancia { public static void main(String[] args) { if (Math.random() < 0.5) System.out.println(“Testa"); elseMath.random() < 0.5) System.out.println(“Croce"); } Cicli ▪ Nota per i programmatori C++ ▪ I costrutti di controllo del flusso offerti da Java sono praticamente uguali a quelli del C++: per voi dovrebbe quindi essere molto naturale usarli. Solo con Java 5 è stato introdotto un nuovo costrutto per ciclare, il foreach, molto elegante e potente. ( lo vedremo dopo aver introdotto gli array). class WhileDemo { public static void main(String[] args){ int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } } } While Il codice di cui sopra stampa il valore di count: il loop while viene eseguito 10 volte, dopodichè la condizione diventa false e il flusso continua in modo lineare. class DoWhileDemo { public static void main(String[] args){ int count = 1; do { System.out.println("Count is: " + count); count++; } while (count <= 11); } } Do-While L’unica differenza tra il while e il do-while è che il secondo valuta l’espressione alla fine del loop, anziché all’inizio: questo implica che gli statement inclusi nel blocco do sono eseguiti almeno una volta. // vengono stampati i numeri da 1 a 10 for (int i = 1; i <= 10; i++) System.out.println(i); // conto alla rovescia da 10 a 1 for (int i = 10; i > 0; i--) System.out.println("Conto alla rovescia . . . " + i); System.out.println("Decollo!"); For: for (initialization; termination; increment or decrement) { statement(s) } L’espressione di inizializzazione è eseguita una volta sola, quando il loop inizia. Quando l’espressione di terminazione vale false il loop termina. L’espressione di incremento è invocata ad ogni iterazione del loop e può incrementare o decrementare un valore. Array Array Un array è una struttura dati che memorizza una collezione di valori dello stesso tipo. Ogni elemento singolo viene acceduto tramite un indice intero. Vediamo come dichiarare e usare un array con un esempio di codice: Supponiamo di voler scrivere un programma che chiede all’utente di inserire 10 numeri, e poi li stampa nell’ordine in cui sono stati inseriti Dovremmo usare 10 variabili di tipo intero per collezionare i valori inseriti. SCOMODO, IMPRATICABILE QUANDO LE VARIABILI SONO MIGLIAIA I linguaggi di programmazione ci forniscono il costrutto degli ARRAY Array Un array `e: una sequenza di variabili di tipo omogeneo (tutti dello stesso tipo) distinguibili l’uno dall’altro (indirizzabili) in base alla loro posizione all’intero della sequenza (indici interi) int [] elementi = new int [5]; Dichiarazione di un array // crea un array di 5 elementi inizializzati a 10 , 5, 21 , -12 e 74 Tipo dell’array Simbolo [ ] int [] numeri = { 10 , 5 , 21 , -12 , 74 }; Utilizziamo l’operatore new e chiamiamo il COSTRUTTORE dell’array passandogli la dimensione tra [ ] Uso degli array double[] x = { 0.3, 0.6, 0.1 }; double[] y = { 0.5, 0.1, 0.4 }; int N = x.length; double sum = 0.0; for (int i = 0; i < N; i++) { sum = sum + x[i]*y[i]; } Attenzione I singoli elementi di un array possono essere acceduti in lettura (in un’espressione) o in scrittura (in un assegnamento) indicandone la posizione (indice) tra parentesi quadrate Ricordarsi che il primo elemento ha indice 0!!! ATTENZIONE: se l’array ha dimensione n l’indice tra le parentesi deve essere compreso tra 0 e n-1 ▪ in caso contrario si incontrerà un errore in fase di esecuzione