SlideShare a Scribd company logo
1 of 28
Introduzione a Java
Valerio Radice
Valerio Radice
valerio.radice@nextre.it
WEB DEVELOPER & TEACHER
https://github.com/valix85
https://plus.google.com/+ValerioRadice85
https://it.linkedin.com/in/valix85/it
Di cosa si parlerà ?
 Costrutto if then else,operatore ternario
 Cicli, attenzione ai blocchi di codice innestati senza le parentesi
 Break e continue
 Casting, AutoBoxing e AutoUnboxing
 Dati possibili con gli switch
 Diversi modi di scrivere l'assegnazione e la dichiarazione degli Array
 priorità degli operatori
 Esempi di cicli for
 Il ciclo for migliorato
 Iterator
Array
 Un array è una collezione indicizzata che ci permette di tenere traccia di un
insieme di dati, sia primitivi che reference, o di altri array.
 Per usare un array bisogna:
 Dichiararlo //char room [];
 Creazione //room = new char[3];
 Inizializzazione //room[0] = 'k'; room[1] = 'y'; room[2] = 'z';
 Nota: gli indici partono sempre da 0!
Array
//Dichiarazione
char room [];
char room1[];
char[] rooms;
char [] rooms1;
//Creazione
room = new char [2];
room1 = new char[2];
//Inizializzazione
room[0] = 'k';
room1 [1] = 'Y';
//Contrazione
char room9 [] = {'k','Y','z'};
char room8[] = {'k','Y','z'};
char [] room7 = {'k','Y','z'};
char[] room6 = {'k','Y','z'};
int qta = room.length; //è una proprietà! Non un metodo!
Array multidimensionali
 Un array multidimensionale, o
matrice, è un array di array.
 Valgono le stesse regole
dichiarative degli array
int matrix [][] = new int[3][];
matrix [0] = new int[5];
matrix [1] = new int[2];
matrix [2] = new int[6];
matrix[0][0] = 8;
matrix[0][1] = 5;
// ...
matrix[1][0] = 52;
matrix[1][1] = 49;
matrix[2][0] = 128;
matrix[2][1] = 256;
// ...
//forma contratta
int matrix2 [][] = {
{8,5,3,4,5},
{52,49},
{128,256,512,1024,2048,4096}
};
Args
 Nella creazione di un programma il metodo main vuole obbligatoriamente in
ingresso un parametro di tipo String[] chiamato solitamente args, che
contiene l'elenco dei parametri con il quale il comando java è stato lanciato.
Es:
 Dato il programma hello.java che prende come argomento nome e cognome
 public static void main(String[] args) {…}
 java hello Valerio Radice
 Conterrà in posizione 0 la stringa Valerio (args[0])
 Conterrà in posizione 1 la stringa Radice (args[1])
varargs
L'uso dei varargs (java > 5) permette di passare un numero imprecisato e quindi rende
molto più veloce fare un overload dei metodi.
Usare un varargs richiede l'ausilio della keyword … (non importa se vicino al tipo,
all'identificatore o spaziato da entrambi) e va sempre inserito, per ovvi motivi, come
ultimo parametro. Non posso avere più varargs in una dichiarazione. I varargs sono
considerati come array.
public double somma(double base, double ... numeri){
double ris = 0D + base;
for(double n : numeri){
ris+=n;
}
return ris;
}
Modulo 4
Operatori e gestione del flusso di esecuzione
Operatori
Java eredita tutti gli operatori di C
Ogni operatore ha un livello di priorità cosicchè possa definire un ordine di
valutazione anche senza aver bisogno delle parentesi (quando possibile).
Usare solo le parentesi tonde per definire l'ordine delle operazioni da seguire.
Per concatenare due stringhe si può usare il metodo append() o più
semplicemente usare l'operatore di somma (+). In realtà il compilatore
trasformerà tutte le stringhe in col metodo append() della classe StringBuilder.
Operatori
Direzione di applicazione
Test
//int a = 128;
//byte b = (byte) a;
boolean flag = ( ( a != 0) && ( b/a > -10 ) );
boolean flag1 = ( a != 0) || ( b/a > 10 );
boolean flag2 = ( a != 0) & ( b/a > 10 );
Controllo del flusso
Per gestire l'esecuzione del programma e permettere delle scelte operative Java
mette a disposizione due tipi di costrutti:
 Condizioni
 if / operatore ternario
 switch
 Cicli
 while
 for e forEach
 do
if
Il costrutto if permette a java di prendere delle decisioni
if (test) { statement se vero } else { statement se falso }
In caso di UNA sola istruzione si possono omettere le parentesi graffe.
if ( pos == 1 )
str = "Hai vinto";
else
str = "Hai perso";
else if
Nel caso in cui si voglia creare una struttura che nel caso di falsità controlli
nuovamente un nuovo valore di test è possibile usare il costrutto else if. Es:
if (espressione){
//todo …
} else if (espressione2) {
//todo …
}else {
//todo …
}
Annidamento
Anche in caso di valutazione positiva è possibile valutare un'altra condizione.
Usare le parentesi graffe per circondare anche una sola istruzione è buona norma e
aumenta la leggibilità.
int x=3, x2=0,k;
if ( x > 2 )
if ( x2 < 5 )
k=0;
else
k=9;
else
k=3;
System.out.println(k);
int x=3, x2=0,k;
if ( x > 2 )
if ( x2 < 5 )
k=0;
else
k=9;
else
k=3;
System.out.println(k);
int x=3, x2=0,k;
if ( x > 2 ){
if ( x2 < 5 ){
k=0;
} else {
k=9;
} else {
k=3;
}
System.out.println(k);
Operatore ternario
Quando si tratta di prendere decisioni in linea o valutare condizioni semplici si
può usare l'operatore ternario, che NON sostituisce l'if!
variabile = (espressione) ? caso vero : caso falso;
Non è possibile fare assegnamenti nei casi di verità, ma l'operatore ternario
ritorna sempre un valore.
String sesso = (str==1) ? "M" : "F"; //ok
(str==1) ? sesso="M" : sesso="F"; //errore di compilazione
While
Permette di iterare un blocco di codice n volte fintantoché una condizione risulta
vera (esce col falso). Il codice potrebbe non essere mai eseguito, prima si valuta
poi si esegue!
while (espressione booleana){
//todo…
[aggiornamento
variabile di
controllo ]
}
int volte = 0;
while (volte < 5){
System.out.println(volte);
volte = volte + 1;
}
//refactor
volte = 0;
while (volte < 5){
System.out.println(volte++);
}
for
Il ciclo "for" permette di iterare un blocco di codice per un numero di volte definito,
prevede una dichiarazione, una condizione e un aggiornamento (o blocco di istruzioni –
statement)
for( inizializzazione; condizione; aggiornamento )
istruzione o { blocco };
È consigliabile usare sempre uno statement anche con una sola istruzione, si migliora
la leggibilità del codice.
Il blocco di inizializzazione permette anche di creare delle variabili, divise da virgola e
dello stesso tipo, che smetteranno di esistere al di fuori di esso. Il blocco della
condizione permette di dichiarare condizioni complesse e composte. Il blocco di
aggiornamento permette di agire anche su più variabili (anche diverse da quelle
istanziate), dividendo le istruzioni con la virgola.
for
Tutti i blocchi di inizializzazione del ciclo for sono opzionali.
È possibile scrivere anche: for(;;){} //questo crea un ciclo infinito, tutto sarà
gestito dallo sviluppatore dentro allo statement.
for (int i = 0; i<5; i++)
System.out.println("i: "+i);
for (int vr1 = 0, vr2 = 9; k<=15 ;k++, vr2--, --vr1){
System.out.println("vr1: " + vr1 +
"tvr2: " + vr2 +
"tk: " + k);
}
do
Il costrutto "do" è molto simile come funzionamento al costrutto "while" solo che
l'esecuzione viene garantita almeno una volta perché la condizione viene
verificata solo a seguito del blocco di codice da ripetersi; se la condizione è falsa
il ciclo si interrompe.
[inizializzazione;]
do{
statement
[aggiornamento]
} while (condizione)
k= 0;
do {
System.out.println("k vale: " + k);
k++;
}while(k<5);
for migliorato (semplificato)
Il ciclo for migliorato è meno potente del ciclo for, viene anche detto foreach
in quanto ogni elemento, avanzando sempre nell'array, viene estratto e reso
disponibile allo sviluppatore.
Questo ciclo for non ha indici (non è posizionale, manca anche di
aggiornamento), può essere scorso solo in una direzione (avanzamento). Sintassi:
for (TipoElemento item : items){
//item è disponibile
}
for (char xc : "Demo".toCharArray()){
System.out.println(xc);
}
switch
Il costrutto switch permette di fare
delle scelte sulla base di un valore di
test preso in esame. Non tutti i tipi
possono essere testati, in dettaglio si
possono usare String, byte, short, int,
char e relative classi wrapper, ed
enumerazioni;
Ogni caso fa inserito in un blocco case
e terminato con break, altrimenti
verranno eseguiti anche gli altri
blocchi case. Se nessun blocco case è
verificato può essere eseguito in case
"default", ultimo della lista.
Il blocco default è consentito anche in
posizione precedente, in tal caso
influenzerà le altre scelte (precedenti
o successive).
switch (k){
case 1:
System.out.println("Aperto");
break;
case 2:
System.out.println("Chiuso");
break;
case 3:
System.out.println("Self-service");
break;
default:
System.out.println("Scelta errata");
}
break & continue
Sono due parole riservate che permettono di rompere lo statement (e rompere
una decisione). In caso di una continuazione prematura si può usare il continue
per riportare il ciclo al prossimo step.
In caso di più cicli annidati come fare a capire quello da rompere? Grazie alla
label è possibile etichettare uno statement (e agire su di esso come
conseguenza).
nomeDellaLabel: do{ //todo… }while (condizione);
Basterà poi richiamare break nomeDellaLabel;
Iterator
È un oggetto che permette di ciclare una Collection in una sola direzione ed estrarre
ogni singolo valore.
Permette di trattare allo stesso modo i diversi oggetti della classe Collection.
Implementazione del Design Pattern Iterator come semplificazione nell'uso degli
oggetti della classe Collection.
Metodi comuni:
hasNext() -> boolean : ritorna true se ho ancora elementi
next() -> <E> : restituisce l'elemento successivo
remove() -> void : rimuove un oggetto dalla collezione
Per le liste anche all'indietro:
previous() -> <E> : ritorna l'elemento precedente
hasPrevious() -> boolean : ritorna true se ho ancora elementi precedenti
add(<E>) -> void : permette di aggiungere un elemento alla lista
nextIndex() / previousIndex() -> int : ritorna l'indice del prossimo/precedente
elemento.
Iterator
ArrayList al = new
ArrayList();
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
Domande
Elenca i tipi primitivi.
Quali sono gli argomenti obbligatori per un ciclo for?
Cosa non si può fare con il ciclo for migliorato
Come si dichiarano e usano gli array?
Quali tipi possono essere testati con un costrutto switch?
Il costrutto for può sostituire il while?
Che differenza c'è tra ++k e k++?
Dato x = 0 quanto vale x dopo ris = ++x * x--?

More Related Content

Recently uploaded

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 

Recently uploaded (9)

Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Java OCA teoria 2

  • 2. Valerio Radice valerio.radice@nextre.it WEB DEVELOPER & TEACHER https://github.com/valix85 https://plus.google.com/+ValerioRadice85 https://it.linkedin.com/in/valix85/it
  • 3. Di cosa si parlerà ?  Costrutto if then else,operatore ternario  Cicli, attenzione ai blocchi di codice innestati senza le parentesi  Break e continue  Casting, AutoBoxing e AutoUnboxing  Dati possibili con gli switch  Diversi modi di scrivere l'assegnazione e la dichiarazione degli Array  priorità degli operatori  Esempi di cicli for  Il ciclo for migliorato  Iterator
  • 4. Array  Un array è una collezione indicizzata che ci permette di tenere traccia di un insieme di dati, sia primitivi che reference, o di altri array.  Per usare un array bisogna:  Dichiararlo //char room [];  Creazione //room = new char[3];  Inizializzazione //room[0] = 'k'; room[1] = 'y'; room[2] = 'z';  Nota: gli indici partono sempre da 0!
  • 5. Array //Dichiarazione char room []; char room1[]; char[] rooms; char [] rooms1; //Creazione room = new char [2]; room1 = new char[2]; //Inizializzazione room[0] = 'k'; room1 [1] = 'Y'; //Contrazione char room9 [] = {'k','Y','z'}; char room8[] = {'k','Y','z'}; char [] room7 = {'k','Y','z'}; char[] room6 = {'k','Y','z'}; int qta = room.length; //è una proprietà! Non un metodo!
  • 6. Array multidimensionali  Un array multidimensionale, o matrice, è un array di array.  Valgono le stesse regole dichiarative degli array int matrix [][] = new int[3][]; matrix [0] = new int[5]; matrix [1] = new int[2]; matrix [2] = new int[6]; matrix[0][0] = 8; matrix[0][1] = 5; // ... matrix[1][0] = 52; matrix[1][1] = 49; matrix[2][0] = 128; matrix[2][1] = 256; // ... //forma contratta int matrix2 [][] = { {8,5,3,4,5}, {52,49}, {128,256,512,1024,2048,4096} };
  • 7. Args  Nella creazione di un programma il metodo main vuole obbligatoriamente in ingresso un parametro di tipo String[] chiamato solitamente args, che contiene l'elenco dei parametri con il quale il comando java è stato lanciato. Es:  Dato il programma hello.java che prende come argomento nome e cognome  public static void main(String[] args) {…}  java hello Valerio Radice  Conterrà in posizione 0 la stringa Valerio (args[0])  Conterrà in posizione 1 la stringa Radice (args[1])
  • 8. varargs L'uso dei varargs (java > 5) permette di passare un numero imprecisato e quindi rende molto più veloce fare un overload dei metodi. Usare un varargs richiede l'ausilio della keyword … (non importa se vicino al tipo, all'identificatore o spaziato da entrambi) e va sempre inserito, per ovvi motivi, come ultimo parametro. Non posso avere più varargs in una dichiarazione. I varargs sono considerati come array. public double somma(double base, double ... numeri){ double ris = 0D + base; for(double n : numeri){ ris+=n; } return ris; }
  • 9. Modulo 4 Operatori e gestione del flusso di esecuzione
  • 10. Operatori Java eredita tutti gli operatori di C Ogni operatore ha un livello di priorità cosicchè possa definire un ordine di valutazione anche senza aver bisogno delle parentesi (quando possibile). Usare solo le parentesi tonde per definire l'ordine delle operazioni da seguire. Per concatenare due stringhe si può usare il metodo append() o più semplicemente usare l'operatore di somma (+). In realtà il compilatore trasformerà tutte le stringhe in col metodo append() della classe StringBuilder.
  • 13. Test //int a = 128; //byte b = (byte) a; boolean flag = ( ( a != 0) && ( b/a > -10 ) ); boolean flag1 = ( a != 0) || ( b/a > 10 ); boolean flag2 = ( a != 0) & ( b/a > 10 );
  • 14. Controllo del flusso Per gestire l'esecuzione del programma e permettere delle scelte operative Java mette a disposizione due tipi di costrutti:  Condizioni  if / operatore ternario  switch  Cicli  while  for e forEach  do
  • 15. if Il costrutto if permette a java di prendere delle decisioni if (test) { statement se vero } else { statement se falso } In caso di UNA sola istruzione si possono omettere le parentesi graffe. if ( pos == 1 ) str = "Hai vinto"; else str = "Hai perso";
  • 16. else if Nel caso in cui si voglia creare una struttura che nel caso di falsità controlli nuovamente un nuovo valore di test è possibile usare il costrutto else if. Es: if (espressione){ //todo … } else if (espressione2) { //todo … }else { //todo … }
  • 17. Annidamento Anche in caso di valutazione positiva è possibile valutare un'altra condizione. Usare le parentesi graffe per circondare anche una sola istruzione è buona norma e aumenta la leggibilità. int x=3, x2=0,k; if ( x > 2 ) if ( x2 < 5 ) k=0; else k=9; else k=3; System.out.println(k); int x=3, x2=0,k; if ( x > 2 ) if ( x2 < 5 ) k=0; else k=9; else k=3; System.out.println(k); int x=3, x2=0,k; if ( x > 2 ){ if ( x2 < 5 ){ k=0; } else { k=9; } else { k=3; } System.out.println(k);
  • 18. Operatore ternario Quando si tratta di prendere decisioni in linea o valutare condizioni semplici si può usare l'operatore ternario, che NON sostituisce l'if! variabile = (espressione) ? caso vero : caso falso; Non è possibile fare assegnamenti nei casi di verità, ma l'operatore ternario ritorna sempre un valore. String sesso = (str==1) ? "M" : "F"; //ok (str==1) ? sesso="M" : sesso="F"; //errore di compilazione
  • 19. While Permette di iterare un blocco di codice n volte fintantoché una condizione risulta vera (esce col falso). Il codice potrebbe non essere mai eseguito, prima si valuta poi si esegue! while (espressione booleana){ //todo… [aggiornamento variabile di controllo ] } int volte = 0; while (volte < 5){ System.out.println(volte); volte = volte + 1; } //refactor volte = 0; while (volte < 5){ System.out.println(volte++); }
  • 20. for Il ciclo "for" permette di iterare un blocco di codice per un numero di volte definito, prevede una dichiarazione, una condizione e un aggiornamento (o blocco di istruzioni – statement) for( inizializzazione; condizione; aggiornamento ) istruzione o { blocco }; È consigliabile usare sempre uno statement anche con una sola istruzione, si migliora la leggibilità del codice. Il blocco di inizializzazione permette anche di creare delle variabili, divise da virgola e dello stesso tipo, che smetteranno di esistere al di fuori di esso. Il blocco della condizione permette di dichiarare condizioni complesse e composte. Il blocco di aggiornamento permette di agire anche su più variabili (anche diverse da quelle istanziate), dividendo le istruzioni con la virgola.
  • 21. for Tutti i blocchi di inizializzazione del ciclo for sono opzionali. È possibile scrivere anche: for(;;){} //questo crea un ciclo infinito, tutto sarà gestito dallo sviluppatore dentro allo statement. for (int i = 0; i<5; i++) System.out.println("i: "+i); for (int vr1 = 0, vr2 = 9; k<=15 ;k++, vr2--, --vr1){ System.out.println("vr1: " + vr1 + "tvr2: " + vr2 + "tk: " + k); }
  • 22. do Il costrutto "do" è molto simile come funzionamento al costrutto "while" solo che l'esecuzione viene garantita almeno una volta perché la condizione viene verificata solo a seguito del blocco di codice da ripetersi; se la condizione è falsa il ciclo si interrompe. [inizializzazione;] do{ statement [aggiornamento] } while (condizione) k= 0; do { System.out.println("k vale: " + k); k++; }while(k<5);
  • 23. for migliorato (semplificato) Il ciclo for migliorato è meno potente del ciclo for, viene anche detto foreach in quanto ogni elemento, avanzando sempre nell'array, viene estratto e reso disponibile allo sviluppatore. Questo ciclo for non ha indici (non è posizionale, manca anche di aggiornamento), può essere scorso solo in una direzione (avanzamento). Sintassi: for (TipoElemento item : items){ //item è disponibile } for (char xc : "Demo".toCharArray()){ System.out.println(xc); }
  • 24. switch Il costrutto switch permette di fare delle scelte sulla base di un valore di test preso in esame. Non tutti i tipi possono essere testati, in dettaglio si possono usare String, byte, short, int, char e relative classi wrapper, ed enumerazioni; Ogni caso fa inserito in un blocco case e terminato con break, altrimenti verranno eseguiti anche gli altri blocchi case. Se nessun blocco case è verificato può essere eseguito in case "default", ultimo della lista. Il blocco default è consentito anche in posizione precedente, in tal caso influenzerà le altre scelte (precedenti o successive). switch (k){ case 1: System.out.println("Aperto"); break; case 2: System.out.println("Chiuso"); break; case 3: System.out.println("Self-service"); break; default: System.out.println("Scelta errata"); }
  • 25. break & continue Sono due parole riservate che permettono di rompere lo statement (e rompere una decisione). In caso di una continuazione prematura si può usare il continue per riportare il ciclo al prossimo step. In caso di più cicli annidati come fare a capire quello da rompere? Grazie alla label è possibile etichettare uno statement (e agire su di esso come conseguenza). nomeDellaLabel: do{ //todo… }while (condizione); Basterà poi richiamare break nomeDellaLabel;
  • 26. Iterator È un oggetto che permette di ciclare una Collection in una sola direzione ed estrarre ogni singolo valore. Permette di trattare allo stesso modo i diversi oggetti della classe Collection. Implementazione del Design Pattern Iterator come semplificazione nell'uso degli oggetti della classe Collection. Metodi comuni: hasNext() -> boolean : ritorna true se ho ancora elementi next() -> <E> : restituisce l'elemento successivo remove() -> void : rimuove un oggetto dalla collezione Per le liste anche all'indietro: previous() -> <E> : ritorna l'elemento precedente hasPrevious() -> boolean : ritorna true se ho ancora elementi precedenti add(<E>) -> void : permette di aggiungere un elemento alla lista nextIndex() / previousIndex() -> int : ritorna l'indice del prossimo/precedente elemento.
  • 27. Iterator ArrayList al = new ArrayList(); al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); }
  • 28. Domande Elenca i tipi primitivi. Quali sono gli argomenti obbligatori per un ciclo for? Cosa non si può fare con il ciclo for migliorato Come si dichiarano e usano gli array? Quali tipi possono essere testati con un costrutto switch? Il costrutto for può sostituire il while? Che differenza c'è tra ++k e k++? Dato x = 0 quanto vale x dopo ris = ++x * x--?