Quattro chiacchiere su Java SE
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Quattro chiacchiere su Java SE Alberto MOLINARI albertom.altervista.org molinari.alberto@gmail.com 26 marzo 2010 “Imparare è un’esperienza, tutto il resto è solo informazione.” (A. Einstein)
Introduzione Definizione (intuitiva) di “linguaggio di programmazione” E’ un linguaggio non verbale dotato di lessico, regole,. . . che ha come scopo quello di scrivere programmi per computer Java è un linguaggio di programmazione Recente: Gosling, 1995, Sun Microsystems (ora Oracle) Case Sensitive Dodato di un gran numero di funzionalità già disponibili senza installare programmi aggiuntivi Possibilità di creare piccoli programmi (anche avanzati, detti applet) che si integrano nelle pagine web Linguaggio di programmazione basato su interpretazione Orientato agli oggetti Alberto Molinari Quattro chiacchiere su Java SE
Cenni alla programmazione orientata agli oggetti Gli oggetti sono entità astratte che hanno uno stato e possono compiere azioni Ogni oggetto è di un determinato tipo Si può pensare ad un programma come un insieme di oggetti che interagiscono tra loro Un oggetto può chiedere a un altro un servizio; quest’ultimo se ne fa carico e deve rispondere adeguatamente Esempio: Un’automobile con poca benzina (stato) richiede (azione) al benzinaio (l’altro oggetto) di fare benzina. Questo se ne fa carico e riempie il serbatoio Alberto Molinari Quattro chiacchiere su Java SE
Sintassi La sintassi (cioè l’insieme delle regole di scrittura) è diversa da quella del Pascal. E’ invece uguale a quella del C/C++ Si fa uso abbastanza massiccio di parentesi graffe { } per separare blocchi di codice con lo stesso significato (come il begin ed end del Pascal) Al termine di ogni istruzione bisogna mettere un ; Alberto Molinari Quattro chiacchiere su Java SE
Primo, classico, programma “Hello World!” class Prova{ public static void main (String[] args){ System.out.println("Hello world!"); } } Alberto Molinari Quattro chiacchiere su Java SE
Ottenere il file in Java Bytecode In realtà Java è parzialmente compilato: bisogna, dal codice sorgente puro, ottenere il bytecode Il bytecode è un linguaggio di basso livello, adatto per essere inviato in rete Il bytecode è quello che viene interpretato in tempo reale dalla Java Virtual Machine ed eseguito Per ottenere il bytecode: comando nel prompt dei comandi javac nome file.java Alberto Molinari Quattro chiacchiere su Java SE
Versatilità di Java Esiste una versione (più correttamente, un’ implementazione) della JVM per ogni sistema operativo I vostri programmi funzioneranno su Windows, Linux, MacOs X, WindowsMobile, Android, Symbian. . . Con piccoli adattamenti, potete creare le applet e integrarle direttamente in una pagina web: il browser e la JVM le eseguiranno in “collaborazione” Alberto Molinari Quattro chiacchiere su Java SE
Ambienti di sviluppo (IDE) Gli ambienti di sviluppo sono software che aiutano i programmatori a scrivere codice più velocemente Suggeriscono il nome delle funzioni Permettono di compilare ed eseguire con un unico tasto Aiutano nel debug “Legge” di Kernighan “Debugging is twice as hard as writing the code in the first place” Quelli più utilizzati per Java sono NetBeans (Sun) Eclipse (HP, IBM, Intel, open-source) Alberto Molinari Quattro chiacchiere su Java SE
NetBeans E’ più intuitivo e semplice Alberto Molinari Quattro chiacchiere su Java SE
Esercizio per iniziare. . . Modificare il programma “Hello World!” perchè visualizzi il vostro nome e cognome. Alberto Molinari Quattro chiacchiere su Java SE
I tipi fondamentali Dichiarazione di variabili Variabile intera int numero = 5 ; Variabile carattere char carattere = ’d’ ; Variabile stringa String parola = ‘‘ciao’’ ; Le variabili stringa in realtà sono oggetti Variabile booleana boolean verofalso = false ; Variabile reale (o meglio, floating point) float numdec = 0.4567 ; Alberto Molinari Quattro chiacchiere su Java SE
I tipi fondamentali Dichiarazione di costanti La dichiarazione è uguale, basta premettere la keyword final. Costante intera final int numero = 5 ; Costante carattere final char carattere = ’d’ ; Costante stringa1 final String parola = ‘‘ciao’’ ; Costante booleana final boolean verofalso = false ; Costante reale (o meglio, floating point) final float numdec = 0.4567 ; 1 In realtà la keyword final applicata alle variabili che puntano a oggetti ha un significato un po’ diverso. Con le stringhe però l’effetto ottenuto è identico a quello per gli altri tipi fondamentali Alberto Molinari Quattro chiacchiere su Java SE
Assegnamento E’ possibile assegnare valori alle variabili non solo in fase di dichiarazione L’operatore di assegnamento è = (che equivale al := del Pascal) Esso non va confuso con == che indica invece l’uguaglianza Esempi k = 54; //supponiamo che k sia un int str = ‘‘qualche testo’’; //str è una String x = x + 56.5671; //x è un float Alberto Molinari Quattro chiacchiere su Java SE
Assegnamento Operatore uguale == Operatore diverso != Operatori di disuguaglianza < > = Not, and, or logici (sono cortocircuitati) ! && || I primi 3 tipi di operatori si possono usare con interi, floating-point e caratteri (per le stringhe vedere in seguito) I primi 2 tipi e il quarto tipo si possono applicare ai booleani Alberto Molinari Quattro chiacchiere su Java SE
Simboli di operazione somma + sottrazione - moltiplicazione * divisione / (se entrambi gli operandi sono interi il risultato è intero, altrimenti è un floating-point) Per fissare le idee. . . Come si può ottenere un quoziente float se gli operandi sono interi? (Es. 3/2 = 1.5) resto nella divisione intera % (es. 5 % 2 = 1) Molte altre con Math.funzione_scelta(...) Math.pow(5.0, 2.0) //restituisce 25.0 Math.cos(Math.PI/2.0) //restituisce il coseno di π/2 radianti Alberto Molinari Quattro chiacchiere su Java SE
Alcuni costrutti fondamentali I cicli Ciclo for for (int i=1; i
Alcuni costrutti fondamentali If . . . then . . . else . . . Se la condizione dopo “if” è vera, si esegue il primo blocco, altrimenti il secondo if (numero>0){ System.out.println("Il numero è positivo"); }else{ System.out.println("Il numero è negativo o nullo") } Alberto Molinari Quattro chiacchiere su Java SE
Alcuni costrutti fondamentali If . . . then . . . else . . . nidificati Se la condizione dopo “if” è vera, si esegue il primo blocco, altrimenti il secondo o il terzo in base alla seconda condizione if (numero>0){ System.out.println("Il numero è positivo"); }else if (n==0){ System.out.println("Il numero è nullo"); }else{ System.out.println("Il numero è negativo"); } Alberto Molinari Quattro chiacchiere su Java SE
Esempio Calcolo del MCD di due naturali public class MCD { public static void main(String[] args){ int i=392, k=42; while(i!=k){ if(i>k) i=i-k; else k=k-i; } System.out.print("Il MCD dei numeri inseriti e’ "); System.out.println(i); if (i==1) System.out.println("I numeri sono coprı̀mi"); } } Alberto Molinari Quattro chiacchiere su Java SE
Alcune cose in più sulle stringhe Supponendo di aver dichiarato una stringa, String str="ciao"; sono definite le operazioni: str.toLowerCase() //converte tutto in minuscole str.toUpperCase() str.length() //lunghezza stringa str.substring(int ind1, int ind2) //sottostringa che parte da ind1 a ind2 escluso str.equals(String str2) //vero se le 2 stringhe sono uguali str.charAt(int k) //dà il carattere (char) in posizione k //(il primo è in posizione 0) Usare il metodo equals, non == con le stringhe Alberto Molinari Quattro chiacchiere su Java SE
Esempio Inverti stringhe in output import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class stringheOut { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("Immettere più parole. Per terminare STOP"); String str = br.readLine(); String strOut = ""; while (!str.equals("STOP")) { strOut = str + "; " + strOut; str = br.readLine(); } System.out.println("Le parole inserite sono, in ordine invertito"); System.out.println(strOut); } } Alberto Molinari Quattro chiacchiere su Java SE
Esercizi base 1 Fornire in output tutti i numeri interi compresi fra 20 e 300 2 Dati 2 naturali ≥ 2, calcolare il minimo comune multiplo 3 Richiedere 10 valori e dare in output la media aritmetica 4 Richiedere un valore naturale e fornire in output il suo fattoriale Definizione di fattoriale n! = n × (n − 1) × (n − 2) · · · × 3 × 2 × 1 ∀n ∈ N∗ 0! = 1 5 Richiedere in input una stringa di caratteri e fornire in output il numero di occorrenze del carattere ‘a’ Alberto Molinari Quattro chiacchiere su Java SE
Vettori I vettori non sono altro che variabili dello stesso tipo che hanno lo stesso nome e si distinguono grazie a un indice Esempio: int[ ] vettinteri = new int [7]; Abbiamo dichiarato un vettore di 7 interi Per assegnare dei valori a ogni elemento: vettinteri[0]=38; ... vettinteri[6]=10; La keyword new indica che il vettore è un oggetto vettinteri.length indica la lunghezza del vettore (in questo caso 7) Alberto Molinari Quattro chiacchiere su Java SE
Esempio I Inverti parole import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class NewClass { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("Immettere massimo 50 parole."); System.out.println(" Per terminare STOP."); String str = br.readLine(); String[] vett = new String[50]; int k = 0; Alberto Molinari Quattro chiacchiere su Java SE
Esempio II Inverti parole while (!str.equals("STOP")) { k = k + 1; vett[k - 1] = str; str = br.readLine(); } for (int j = 0; j < k / 2; j = j + 1) { String temp = vett[j]; vett[j] = vett[k - j - 1]; vett[k - j - 1] = temp; } System.out.println("Le parole in ordine invertito sono"); for (int x = 0; x < k; x = x + 1) { System.out.println(vett[x]); } } } Alberto Molinari Quattro chiacchiere su Java SE
Primo esercizio Dopo aver dichiarato un vettore di 5 interi, assegnare alle entrate i valori 0, 2, 4, 6, 8 e stamparli (a video) Suggerimenti: Usare un ciclo for per assegnare i valori agli elementi del vettore Con un altro ciclo for stampare i vettori Rifare la stessa cosa per 100 valori Alberto Molinari Quattro chiacchiere su Java SE
Primo esercizio Soluzione class primoes{ public static void main(String[]args){ int[] vettore = new int[100]; for (int k=0; k
Metodi I I metodi corrispondono alle function (o procedures) del Pascal Il nome deriva dalla programmazione a oggetti Possono essere pensate come “scatole” in cui si inseriscono valori e ne restituiscono altri Esempio public static int somma (int i, int j){ return i+j; } Altro sempio Alberto Molinari Quattro chiacchiere su Java SE
Metodi II public static boolean pari (int numero){ while (numero >= 2){ numero = numero - 2; } if (numero == 0) return true; else return false; //è uguale a 1 } I metodi devono dichiarare il tipo che restituiscono I metodi devono restituire obbligatoriamente un valore di quel tipo con la keyword return Dopo return il metodo restituisce il controllo al chiamante Alberto Molinari Quattro chiacchiere su Java SE
Metodi senza valore di ritorno Se il tipo restituito è void, allora il metodo non restituisce in realtà alcun valore In questo caso return non è seguita da alcun valore Il metodo termina, come al solito, con return o, alternativamente, quando è raggiunta l’ultima istruzione Esempio public static void stampa (String str){ System.out.println(str); } //qui il return è facoltativo Alberto Molinari Quattro chiacchiere su Java SE
Programma con metodi import java.io.*; class Programma{ public static void main (String[] args) throws IOException{ BufferedReader keyboard_reader = new BufferedReader(new InputStreamReader(System.in)); String str = keyboard_reader.readLine(); int k=Integer.parseInt(str); //convers. a int if (pari(k)) System.out.println("e’ pari"); } public static boolean pari (int numero){ while (numero >= 2){ numero = numero - 2; } if (numero == 0) return true; else return false; //è uguale a 1 } } Alberto Molinari Quattro chiacchiere su Java SE
Esempio I Trova numeri primi public class DetPrimi { public static void main(String[] args){ final int MAX = 120; //tutti i numeri primi fino a MAX int[] primi = new int [MAX]; int cont=0; primi[0]=2; //il 2 è convenzionalmente primo for (int k=3; k
Esempio II Trova numeri primi } } public static boolean primo (int i){ for (int k=2; k
Secondo esercizio Scrivere un metodo che restituisca true se la stringa accettata in input è palindroma, altrimenti false Suggerimenti: Con un ciclo for scandire i caratteri della stringa da quello in posizione 0 fino a quello in posizione length/2 Verificare se quelli in posizioni simmetriche (cioè 0 e lenght-1, 1 e length-2, . . . ) sono uguali o meno Alberto Molinari Quattro chiacchiere su Java SE
Secondo esercizio I Soluzione import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Classe1 { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.println("Inserire una parola per sapere se e’ palindroma"); String str = br.readLine(); if (palindroma(str)) System.out.println("e’ palindroma"); else System.out.println("non e’ palindroma"); } Alberto Molinari Quattro chiacchiere su Java SE
Secondo esercizio II Soluzione public static boolean palindroma(String str){ int n=str.length(); for (int k=0; k
Terzo esercizio Scrivere una versione semplificata di Integer.parseInt(String str) che abbiamo utilizzato per convertire una stringa che contiene solo cifre nel corrispondente numero intero Ricordare che charAt(int k) restituisce caratteri. Questi si rappresentano cosı̀: ’d’ Scandire la stringa con un ciclo for Trasformare i caratteri della stringa in cifre e fare in modo che vengano “collocati” al posto giusto nell’intero risultante Alberto Molinari Quattro chiacchiere su Java SE
Terzo esercizio I Soluzione public static int convertiAInt(String str) { int intero = 0; for (int k = 0; k < str.length(); k = k + 1) { if (str.charAt(k) == ’0’) { intero = intero * 10 + 0; } else if (str.charAt(k) == ’1’) { intero = intero * 10 + 1; } else if (str.charAt(k) == ’2’) { intero = intero * 10 + 2; } else if (str.charAt(k) == ’3’) { intero = intero * 10 + 3; } else if (str.charAt(k) == ’4’) { intero = intero * 10 + 4; } else if (str.charAt(k) == ’5’) { Alberto Molinari Quattro chiacchiere su Java SE
Terzo esercizio II Soluzione intero = intero * 10 + 5; } else if (str.charAt(k) == ’6’) { intero = intero * 10 + 6; } else if (str.charAt(k) == ’7’) { intero = intero * 10 + 7; } else if (str.charAt(k) == ’8’) { intero = intero * 10 + 8; } else if (str.charAt(k) == ’9’) { intero = intero * 10 + 9; } } return intero; } Alberto Molinari Quattro chiacchiere su Java SE
Quarto esercizio: SelectionSort Gli algoritmi di ordinamento sono “ricette” (un po’ diverse da quelle per i dolci) che permettono di ordinare, con una quantità di passaggi finita, un vettore di numeri in ordine crescente o decrescente Implementare l’algoritmo di ordinamento “Selection-Sort” Si determina la posizione del minimo degli elementi del vettore e si scambia il minimo con l’elemento in prima posizione Si determina la posizione del minimo degli elementi del vettore dal secondo in poi e si scambia il secondo minimo con l’elemento in seconda posizione . . . e cosı̀ via per tutto il vettore Alberto Molinari Quattro chiacchiere su Java SE
Quarto esercizio: SelectionSort Soluzione public static int[] selectionSort(int[] x) { for (int i=0; i
Riferimenti Diapositive http://albertom.altervista.org/javapres.pdf JDK Selezionare il primo bottone NetBeans (scegliere lingua e sistema operativo: la versione corretta è quella per Java SE, c.a. 54 MB) Pacchetto JDK + NetBeans Selezionare il terzo bottone Eclipse (dopo aver selezionato il sistema operativo, scegliere “Eclipse IDE for Java Developers”, nella versione a 32 o 64 bit) Alberto Molinari Quattro chiacchiere su Java SE
Puoi anche leggere