03. Corso completo di Programmazione Java – I Fondamenti – Parte II

Corso Java - I Fondamenti - Parte II

Bentornati al nostro corso completo di programmazione in JAVA! Quest’oggi terminiamo la carrellata dei componenti che stanno alla base di questo linguaggio, componenti indispensabili e che ci torneranno utili sia per poter iniziare a scrivere i nostri primi semplici programmi in Java, così come quelli più complessi che saremo in grado di realizzare al termine del corso.

In particolare oggi vedremo:

  • Quali operatori abbiamo a disposizione
  • Caratteristiche del tipo String
  • Come fare input/output
  • Cosa sono e come usare gli array

Gli operatori

Java mette a disposizione diversi tipi di operatori:

  • Operatori aritmetici
    public class FondamentiOperatori {
    	public static void main(String[] args) {
    		System.out.println(4 + 5); // stampa 9
    		System.out.println(15 / 2); // stampa 7
    		// modulo: resto della divisione intera (stampa 1)
    		System.out.println(15 % 2);
    		System.out.println(15.0 / 2); // stampa 7.5
     
    		int i = 1;
     
    		i += 5; //shortcut per i = i + 5
    		System.out.println(i); // stampa 6
     
    		//Operatore di incremento
    		int n = 12;
    		System.out.println(n++); // postfisso: stampa 12, subito dopo n vale 13
    		System.out.println(++n); // prefisso: stampa 14
    		System.out.println(--n); // prefisso: stampa 13
    	}
    }
  • Operatori relazionali (==, !=, &&, ||) e ternario
    System.out.println(3 == 7); //stampa false
    System.out.println(3 != 7); //stampa true
     
    System.out.println(n == 13 && i != 5); //stampa true (n == 13 e i == 6)
    System.out.println(n == 12 || i == 6); //stampa true (i == 6)
     
    n = 0;		
    int div = n == 0 ? 0 : i / n;
    System.out.println(div); //stampa zero

    L’operatore ternario è utile in alcuni casi per la sua compattezza: se l’espressione prima di ? è vera restituisce l’espressione a sinistra di :, altrimenti quella a destra.

Per un approfondimento sugli operatori Bitwise, le regole di precedenze e così via rimandiamo al Java Tutorial sugli Operatori.

Il tipo String

Il tipo String è una sequenza di caratteri unicode. Non è un tipo primitivo, ma una classe predefinita contenuta nelle API Java. Tuttavia possiede qualche caratteristica che la rende un po’ speciale. Illustriamone l’utilizzo con un po’ di codice:

public class FondamentiString {
	public static void main(String[] args) {
		String e = ""; // stringa vuota (non null!)
		String greeting = "Hello";
		String s = greeting.substring(0, 3);
		System.out.println(s); // Stampa "Hel"
		s += "lo World"; //concatenazione
		System.out.println(s); // Stampa "Hello World"
 
		System.out.println(greeting); // Stampa sempre "Hello"
	}
}

La cosa particolare di String è che è immutabile: nessuna metodo modifica la stringa su cui è applicato, ma ritorna una nuova istanza con l’esito atteso dal metodo. Se avessimo voluto fare il substring della stringa greeting avremmo dovuto fare così:

greeting = greeting.substring(0, 3);
System.out.println(greeting); // Stavolta stampa "Hel"

Questo è strano, vero sviluppatori C++ 🙂 ? La classe String contiene più di 50 metodi ed è difficile ricordarli tutti: per fortuna possiamo sempre consultare il Javadoc di String.

L’input e l’output

Per quanto riguarda l’Input e l’Output vi diciamo davvero due parole: abbiamo visto che per scrivere in console si utilizza System.out.println(). Per leggere dalla console dando modo ad un utente di digitare parametri in modo interattivo si utilizza la classe Scanner.

Spieghiamo il tutto con un esempio:

import java.util.Scanner;
 
public class FondamentiInputOutput {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.print("Come ti chiami? ");
		String name = in.nextLine();
		System.out.print("Quanti anni hai? ");
		int age = in.nextInt();
 
		System.out.println("Ciao " + name + ". Il prossimo anno avrai "
				+ (age + 1) + " anni!");
	}
}

Notiamo che per istanziare una variabile di tipo Scanner abbiamo utilizzato la parola chiave new: vedremo che questo sarà il default in tutti i casi in cui non stiamo usando tipi primitivi.

Gli 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:

public class FondamentiArray {
 
	public static void main(String[] args) {
		// dichiaro e istanzio un array di interi da 100 posizioni
		int[] a = new int[100];
 
		// ciclo e valorizzo l'array con gli interi da 0 a 99
		for (int i = 0; i < 100; i++)
			a[i] = i;
	}
}

Abbiamo ciclato l’array con un ciclo for: la sintassi e il suo utilizzo sono identici a quelli del C, possiamo quindi consultare il post Istruzioni Iterative del nostro Corso Completo di C per approfondimenti. Inoltre avremo modo di approfondire i costrutti iterativi di Java in uno dei prossimi post.

Per ciclare un array dall’inizio alla fine abbiamo bisogno di sapere quanti elementi contiene: per fortuna ce lo dice il metodo length: un utilizzo tipico è il seguente:

for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
Inizializzazione degli array

Java fornisce un modo comodo di dichiarare un array e inizializzarlo allo stesso tempo:

int[] alcuniNumeriPrimi = { 2, 3, 5, 7, 11, 13 };

Infine gli array possono essere definiti in modo anonimo:

new int[] { 17, 19, 23, 29, 31, 37 }

Conclusioni

Con questa lezione abbiamo terminato la carrellata sui fondamenti di Java e sulla sintassi a basso livello del linguaggio. Occorre ora sedimentare quanto imparato, a tal fine consiglio a tutti di fare un po’ di prove nel vostro fidato IDE e per qualsiasi cosa non esitate a postare un commento qui a fondo articolo o ancor meglio sul nostro forum!

Alla prossima!

Il corso continua con…

04 – Il Controllo del Flusso.

By Manuele Piastra

Sono un Project Manager i cui skill tecnici sono focalizzati al momento sullo sviluppo di applicazioni JavaEE (application server IBM Websphere 7.0 utilizzando JSF (RichFaces), JPA (EclipseLink) ed EJB3) ed Android. Presso OmniaGroup ricopro il ruolo di Training Manager: seleziono il personale tecnico, mi occupo della sua crescita formativa organizzando Corsi e Workshop sia interni che esterni, molti dei quali hanno visto me come docente. Ho tenuto sette sessioni di un corso di formazione di 50 ore sulle tecnologie JavaEE su Application Server WebSphere IBM presso il nostro cliente principale, Coop Italia, dei cui sistemi informativi sono consulente di riferimento. Sono blogger su CoseNonJaviste, blog tecnico che si occupa di Android e Java. Consulta il mio Curriculum online per maggiori informazioni.

4 comments

  1. Non ho ben capito questa sintassi:

    int[] a = new int[100];

    In pratica crea un array di interi che si chiama “a”…. quello che mi manda in confusione è l’assegnamento new int[100];

    int è un tipo primitivo giusto? eppure qui viene usato come classe… anche se le quadre solitamente non si usano nelle classi…

  2. l’istruzione
    new int[] {17, 19 …
    genera un errore (anche mettendo il ; alla fine)

  3. come mai siamo passato dall’intestazione : package it.devapp.corsojava.helloworld; alla import java.util.Scanner; ?
    devo cambiarla ogni volta che devo gestire le stringe ?
    o devo creare un nuovo progetto che mi creerà automaticamente l’intestazione import java.util.Scanner; ?

    grazie !

Comments are closed.