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 SECenni 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 SESintassi
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 SEPrimo, classico, programma
“Hello World!”
class Prova{
public static void main (String[] args){
System.out.println("Hello world!");
}
}
Alberto Molinari Quattro chiacchiere su Java SEOttenere 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 SEVersatilità 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 SEAmbienti 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 SENetBeans
E’ più intuitivo e semplice
Alberto Molinari Quattro chiacchiere su Java SEEsercizio per iniziare. . .
Modificare il programma “Hello World!” perchè visualizzi il vostro nome e
cognome.
Alberto Molinari Quattro chiacchiere su Java SEI 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 SEI 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 SEAssegnamento
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 SEAssegnamento
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 SESimboli 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 SEAlcuni costrutti fondamentali
I cicli
Ciclo for
for (int i=1; iAlcuni 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 SEAlcuni 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 SEEsempio
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 SEAlcune 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 SEEsempio
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 SEEsercizi 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 SEVettori
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 SEEsempio 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 SEEsempio 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 SEPrimo 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 SEPrimo esercizio
Soluzione
class primoes{
public static void main(String[]args){
int[] vettore = new int[100];
for (int k=0; kMetodi 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 SEMetodi 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 SEMetodi 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 SEProgramma 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 SEEsempio 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; kEsempio II
Trova numeri primi
}
}
public static boolean primo (int i){
for (int k=2; kSecondo 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 SESecondo 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 SESecondo esercizio II
Soluzione
public static boolean palindroma(String str){
int n=str.length();
for (int k=0; kTerzo 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 SETerzo 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 SETerzo 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 SEQuarto 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 SEQuarto esercizio: SelectionSort
Soluzione
public static int[] selectionSort(int[] x) {
for (int i=0; iRiferimenti
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 SEPuoi anche leggere