vuoi
o PayPal
tutte le volte che vuoi
TIPI PRIMITIVI NUMERICI
I tipi di dato primitivi numerici possono essere interi (byte, short, int, long) oppure a virgola mobile (float, double).
Ogni tipo di dato ha un range di valori compatibili:
- Tipo byte: 8 bit, range di valori da -128 a 127
- Tipo short: 16 bit, range di valori da -32768 a 32767
- Tipo char: 16 bit, range di valori Unicode
- Tipo int: 32 bit, range di valori da -2.147.483.648 a 2.147.483.647
- Tipo long: 64 bit, range di valori da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
- Tipo float: 32 bit
- Tipo double: 64 bit
- Tipo boolean: 1 bit, valori 0 o 1
COMPATIBILITÀ DI ASSEGNAMENTO
Generalmente, un determinato tipo di variabile non può essere memorizzato in un altro, a meno che non venga convertito in un valore compatibile con quello di destinazione. In Java, però, accade che, in determinate situazioni, tale conversione venga eseguita automaticamente. Nello specifico, quando si assegna un valore a una variabile con tipo di dato più grande di quella di partenza, il processo di conversione, detto casting, avviene in automatico.
L'ordine crescente dei valori numerici:
È: 6® ® ® ® ®byte short int long float double® charIn tutti gli altri casi è richiesto il casting esplicito, quindi un'istruzione del tipo:double varDouble = 25.0;int varInt = (int) varDouble;In questo caso la variabile conterrà il valore di varDouble trasformato in intero, quindi in questo caso 25. Se fosse stata 25.46, varInt varrebbe 25, mentre varDouble rimarrebbe inalterata, dunque 25.46.varDoubleSTRINGHELa stringa è un particolare tipo di classe che permette di essere dichiarata e valorizzata senza creare un oggetto, quindi ha modalità di utilizzo analoga a un dato primitivo.È possibile concatenare più stringhe mediante l'operatore +.METODI DELLE STRINGHEMetodo Dato che ritorna DescrizioneRestituisce il carattere alla posizione corrispondente a index.charAt(index) char index.Confronta la stringa con una seconda stringa secondo l'ordine alfabetico. Restituisce un valore- negativo se la stringa viene prima di 0 se sono str, uguali e un valore positivo se str viene prima.
- Restituisce una stringa che concatena (equivalente all'operatore +) str alla stringa di partenza.
- Restituisce vero se la stringa e str sono uguali, altrimenti falso.
- Analoga alla precedente, ma prescinde dalle maiuscole.
- Restituisce l'indice della prima occorrenza della sottostringa str nella stringa di partenza. Ritorna -1 se non è presente.
- Analoga alla precedente, ma restituisce l'indice dell'ultima occorrenza di str nella stringa di partenza.
- Restituisce la lunghezza della stringa.
- Restituisce una stringa analoga a quella di partenza, ma con le lettere maiuscole convertite nelle minuscole corrispondenti.
- Restituisce una stringa analoga a quella di partenza, ma con le lettere minuscole convertite nelle maiuscole corrispondenti.
maiuscole corrispondenti.
Restituisce una stringa analoga a replace(pchr,nchr)
. String quella di partenza, ma con tutte le occorrenze del carattere pchr
sostituite con nchr
.
Restituisce una stringa substring(i)
. String contenente i caratteri di quella di partenza, dalla posizione fino alla fine della stringa.
Analoga alla precedente, ma nella substring(i,end)
. String stringa restituita compaiono i caratteri dalla posizione fino alla posizione end
.
Ritorna una stringa avente gli trim()
. String stessi caratteri della precedente, ma senza spazi iniziali e finali.
SEQUENZE DI ESCAPE
Ponendo escape ( \ ) davanti ad alcuni caratteri, si informa il compilatore che deve essere interpretato come un letterale.
Quest’operazione risulta utile quando occorre mandare in output un ritorno di linea, un doppio apice, etc.
I principali caratteri di escape presenti in Java sono riportati nella tabella seguente:
Sequenza | Azione |
---|---|
\' | Stampa il carattere ' |
\" | Stampa il carattere " |
\\ | Stampa il carattere \ |
Va a capo
Torna all'inizio della riga e sovrascrive
Tabulazione Cancella a sinistra
Ogni sequenza di escape conta come singolo carattere.
Per assegnare ad una variabile un valore inserito da tastiera è necessario definire uno scanner, importando prima la classe inclusa nel package Scanner java.util:
import java.util.Scanner;
In seguito si crea all'interno del main un oggetto della classe Scanner:
Scanner s = new Scanner (System.in);
E poi si scrivono istruzioni diverse in base al tipo di dato che va inserito:
➢ int: s.nextInt();
➢ double: s.nextDouble();
➢ char: s.next().charAt(0);
➢ String: oppure s.nextLine() o s.next();
In particolare, riguardo ai metodi relativi alle stringhe, può leggere l'input next() solo fino allo spazio. Non può dunque leggere due parole separate da uno spazio. Inoltre, il cursore sulla stessa riga dopo aver letto l'input.next() posiziona Il metodo legge invece l'input includendo lo spazio tra le parole,
quindinextLine()fino alla fine della riga (\n, comando dato dalla pressione del tasto enter).Letto l'input, il cursore nella riga successiva.nextLine()posizionaQualora si debba leggere l'intera riga è quindi necessario utilizzare nextLine().
ISTRUZIONE IF-ELSE
L'istruzione if-else effettua una selezione tra due azioni possibili. Ramifica il flusso di controllo, ossia l'ordine in cui il programma svolge le azioni.
La sintassi dell'if-else è:
if(boolean_expression){
Instruction1;
} else {
Instruction2;
}
In un diagramma di flusso equivale a ciò che viene mostrato in Fig. 2.
L'istruzione è ramificabile sia nel ramo if che nel ramo else, ed è anche possibile combinare più espressioni booleane nella condizione espressa tra parentesi tonde, utilizzando gli operatori booleani.
Fig. 2
GENERAZIONE NUMERO CASUALE
Un modo di ottenere un valore numerico generato casualmente in Java è l'utilizzo della classe Math e del metodo
double rand = Math.random();
Qualora si voglia ottenere un numero intero, ad esempio compreso tra 0 e 10, si dovrà scrivere: double rand = (int) (Math.random()*10+1);
oppure: double rand = (int) (Math.random()*11);
CICLO WHILE
I costrutti iterativi, o cicli, consentono l'esecuzione ripetuta di un determinato blocco di codice. Si dividono in pre-condizionali e post-condizionali, a seconda di quando viene eseguito il controllo della condizione. Il ciclo esegue un blocco fino a quando rimane rispettata una data condizione, posta tra parentesi tonde subito dopo la keyword while. La condizione deve essere una variabile o un'espressione booleana e l'iterazione prosegue fino a che il suo valore rimane true. Essendo un ciclo pre-condizionale, se la condizione è false quando l'esecuzione arriva per la prima volta allo statement while, non verrà eseguito il blocco di codice al suo interno.verranno eseguito.
10CICLO DO-WHILE
Il ciclo do-while
, analogamente al ciclo while
, esegue il blocco di codice tra le graffe fino a quando la condizione rimane true, ma, essendo post-condizionale, esegue il controllo alla fine, portando il blocco al suo interno ad essere eseguito almeno una volta, anche se la condizione risulta false.
IL CICLO FOR
Il ciclo for
è un ciclo pre-condizionale che presenta una sintassi che specifica tra parentesi tonde, nell'ordine, un'espressione di inizializzazione eseguita una volta sola prima del ciclo, una condizione di uscita dal ciclo ed un'espressione di aggiornamento (solitamente incremento) da eseguire al termine di ogni esecuzione del blocco.
PARAMETRI ATTUALI E FORMALI
Quando si definisce un metodo (sequenza di istruzioni che costituiscono un sottoprogramma richiamabile all'interno del programma ma non funzionante da solo), si possono inserire dei parametri, elementi scambiabili tra un modulo e l'altro. Le variabili cheLe informazioni che compaiono nella definizione di un modulo vengono dette parametri formali; i dati che vengono sostituiti ai parametri formali al momento del richiamo del modulo vengono detti parametri attuali.
AREE DI MEMORIA
Al momento dell'invocazione di un metodo viene creata una struttura dati, detta record di attivazione, nella quale sono contenute tutte le informazioni necessarie alla gestione dell'esecuzione del metodo, ossia parametri e variabili locali, con valori eventualmente aggiornati durante l'esecuzione. Sono inclusi anche il risultato e l'indirizzo di rientro.
Se il metodo non è void, la cella del risultato conterrà ciò che restituisce il metodo, mentre l'indirizzo di rientro conterrà l'istruzione che il programma dovrà eseguire immediatamente dopo il termine della computazione del metodo. 11
Si crea quindi il record di attivazione, come si può vedere in Fig. 3, al momento della chiamata del metodo e viene posto nello stack.
Una sezione di memoria della RAM utilizzata per allocare la memoria statica ed eseguire i thread, e qui rimane fino al termine dell'esecuzione. Metodi che invocano altri metodi attivano una sequenza di record di attivazione gestita secondo la politica LIFO (Last In First Out).
Ogni volta che si richiama un metodo (anche lo stesso) si crea un record di attivazione diverso, motivo per cui quando si ha ricorsione infinita si verifica un stackOverflowError.
L'heap è invece un'area di memoria dinamica che può essere modificata dalla JVM a run-time durante l'esecuzione.
Nell'heap sono memorizzati gli oggetti (in seguito alla scrittura della keyword new) e il loro stato. Qui avviene il processo di "garbage collection", ossia l'eliminazione degli oggetti non più referenziati.
In sostanza, ogni volta che in un programma viene creato un qualsiasi oggetto, esso viene sempre memorizzato nell'heap, ed un riferimento allo stesso.
è mantenutonello stack. ARRAY Quando l’informazione consiste in un’aggregazione di valori e non in uno singolo, si rende necessaria una variabile in grado di immagazzinare una sequenza di valori omogenei, ossia una variabile di tipo strutturato, l’array. In Java, la dichiarazione di un array avviene nel seguente modo:tipoDato[] nomeArray;
Ad esempio, per dichiarare un array di interi chiamato "numeri", si utilizza la seguente sintassi:
int[] numeri;