•Variabili e costanti •Tipi di dato •Casting •Operatori •Commenti e documentazione Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) All‟interno di un programma, le variabili costituiscono l‟elemento base per la memorizzazione dei dati ed il mantenimento delle informazioni, In Java, le variabili si definiscono combinando un tipo, un identificatore ed opzionalmente un parametro di inizializzazione: Tipo identificatore [= inizializzazione; Esempio Int a = 5; non è necessario assegnare un valore alla variabila nel momento in cui si dichiara: Int a; Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Java a differenza di C/C++, richiede che una variabile venga sempre inizializzata prima di poter essere utilizzata. Il seguente codice produce un errore di compilazione: int a; System.out.println(a); Il testo dell‟errore sara: “The local variable a may not have been initialized” Più variabili dello stesso tipo possono essere dichiarate nel corso di una medesima istruzione, utilizzando la virgola come separatore. int a, b, c; Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) The local variable a may not have been initialized Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Le costanti sono speciali variabili il cui contenuto, una volta assegnato, non può essere modificato. Esempio final int COSTANTE = 5; Se si vuole modificare il valore della costante generando un codice scorretto esempio: final int COSTANTE = 5; COSTANTE = 3; viene generato il seguente messaggio di errore: “The final local variable COSTANTE cannot be assigned. It must be blank and not using a compound assignment” Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) The final local variable costante cannot be assigned. It must be blank and not using a compound assignment Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) In realtà, le variabili final non sono delle costanti nel senso più stretto del termine, in quanto possono essere inizializzate dinamicamente e non solo letteralmente. La cosa più corretta sarebbe quella di etichettarle come variabili di sola lettura. Considerando che ad oggi Java non dispone di altri meccanismi utili per creare costanti nel senso più restrittivo del termine, tenendo a mente quanto sopra riportato può essere esteso il concetto di costante, così come descritto in precedenza. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Le variabili, cosi come le costanti, hanno un loro “ciclo di vita”. Nascono nel momento in cui vengono dichiarate, divengono pronte all‟utilizzo immediatamente dopo l‟inizializzazione e “muoiono” non appena escono dal loro ambito di visibilità (validità). Gli ambiti di visibilità, a livello basilare sono strettamente collegati all‟impiego dei blocchi di istruzioni. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Esempio public class EsempioAmbiti { public static void main(String[] args) { int a = 5; int b = 3; int c = a + b; System.out.println(c); } } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Le tre variabili a, b, c, appartengono al blocco denominato main, in quanto sono state dichiarate al suo interno. Fin quando il flusso di esecuzione percorre le istruzioni racchiuse in questa porzione di programma, i riferimenti a, b, c possono essere liberamente impiegati. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Esempio “variabile al di fuori del suo ambito di validità (visibilità): public class EsempioAmbiti { } public static void main(String[] args) { int a = 5; int b = 3; { int c = a + b; } System.out.println(c); /* Errore la variabile si trova al di * fuori del suo ambito di validità */ } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Esempio “variabile al di fuori del suo ambito di validità (visibilità): public class EsempioAmbiti { } public static void main(String[] args) { int a = 5; int b = 3; { int c = a + b; } System.out.println(c); /* Errore la variabile si trova al di * fuori del suo ambito di validità */ } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) c cannot be resolved to a variable Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Viene fornita (copiare, salvare e compilare) la seguente classe: public class NumeroIntero { public int numeroIntero; public void stampaNumero() { System.out.println(numeroIntero); } } Questa classe definisce il concetto di numero intero come oggetto. In essa vengono dichiarati una variabile (ovviamente) intera ed un metodo che stamperà la variabile stessa. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Scrivere, compilare ed eseguire una classe che: • istanzierà almeno due oggetti dalla classe NumeroIntero (contenente ovviamente un metodo main()), • cambierà il valore delle relative variabili e testerà la veridicità delle avvenute assegnazioni, sfruttando il metodo stampaNumero(); • Aggiungerà un costruttore alla classe NumeroIntero, che inizializzi la variabile d‟istanza. Domande: 1. A che tipologia di variabili appartiene la variabile numeroIntero definita nella classe NumeroIntero? 2. Se istanziamo un oggetto della classe NumeroIntero, senza assegnare un nuovo valore alla variabile numeroIntero, quanto varrà quest‟ultima? Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Ad ogni variabile corrisponde un identificatore, vale a dire un nome, che può essere impiegato per richiamare ed utilizzare la variabile dopo che questa è stata dichiarata ed inizializzata. Gli identificatori, per essere reputati validi, devono rispettare alcune regole. Per prima cosa si ricorda che Java è un linguaggio case-sensitive: nomeVariabile, NomeVariabile, NOMEVARIABILE, NomeVARIABILE e tutte le possibili varianti sono nomi che identificano elementi distinti. Gli identificatori possono essere costituiti da una sequenza qualsiasi di lettere minuscole o maiuscole, numeri, trattini di sottolineatura e simboli del dollaro. Non possono, però, cominciare con un numero. I seguenti identificatori sono validi: cont Test VariabileProva $aux c3 a_prima I prossimi, al contrario, sono incorretti: 2aux variabile-prova %perc La sintassi di Java, inoltre, riserva 52 parole (Tabella 1), che non possono essere impiegate come identificatori. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tabella 1 abstract default if private throw assert do implements protected throws boolean double import public transient break else instanceof return true byte enum int short try case extends interface static void catch final long strictfp volatile char finally native super while class float new switch const * for null syncronized continue goto * package this * Parole riservate attualmente non utilizzate da java Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) tipi di dato primitivi numerici interi carattere riferimento booleani array classi virgola mobile Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Java è un linguaggio tipizzato. Ad ogni tipo corrispondono un insieme di valori possibili ed una serie di funzionalità utili per manipolare gli elementi di tale insieme. I valori numerici dispongono di funzioni utili per il calcolo matematico, le stringhe godono di utilità per la manipolazione del testo, le date possono sfruttare delle procedure pensate appositamente per gli intervalli temporali e così via. Tutto ciò implica una netta ed esplicita divisione tra i valori di un tipo e quelli di un altro, che mai possono essere confusi o impiegati in maniera promiscua. I primi dati soggetti a questa norma sono le costanti letterali. 5 è un intero di tipo int, 5.12 un numerico a virgola mobile di genere double, 'c' un carattere della categoria char, "ciao" una stringa e così via. In secondo luogo, anche le espressioni possiedono un tipo. Le espressioni, sono combinazioni di valori ed operatori, che lavorano insieme per calcolare un risultato: Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) 5+3 Questa espressione, ad esempio, è di tipo int, ossia calcola un risultato numerico intero appartenente a tale insieme di dati. 5 + 1.12 Questa, invece, è un'espressione di tipo double. Esistono alcune regole, che saranno discusse nel dettaglio successivamente, che consentono di prevedere il tipo associato ad una espressione, analizzando il dominio di appartenenza di ciascun suo elemento. Le variabili e le costanti risentono delle regole di tipizzazione imposte da Java. Quando si dichiara una variabile, è necessario specificare il tipo ad essa associato. Una variabile di un certo tipo, di conseguenza, non potrà memorizzare dati appartenenti ad una categoria distinta. Tutte le variabili dichiarate int, ad esempio, non potranno far altro che tener traccia di valori int. int a = 5; // Corretto, 5 è un dato int int b = "Ciao"; // Sbagliato, "Ciao" è una stringa Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Java, teoricamente, dispone di un illimitato numero di tipi. La programmazione orientata agli oggetti permette la definizione di nuove categorie di dati, da sommare a quelle incorporate nel linguaggio e a quelle prodotte e distribuite da terzi. Le classi non sono altro che dei modelli per la definizione di nuovi tipi, che il programmatore può utilizzare e riutilizzare a proprio vantaggio. Nonostante questo, è bene fare distinzione tra tipi predefiniti (detti altrimenti tipi valore o tipi base) e tipi personalizzati (detti anche tipi riferimento o semplicemente classi). Java dispone di otto tipi predefiniti, destinati alla rappresentazione dei valori numerici interi, dei numerici a virgola mobile, dei caratteri e dei booleani. Le stringhe, contrariamente a quanto si può credere durante un primo approccio, non fanno parte dei tipi predefiniti. Ad esse è dedicata un'apposita classe, contenuta nei pacchetti base della piattaforma. In Java, le stringhe sono degli oggetti. Ai valori numerici interi sono destinati i quattro tipi riportati in tabella 2. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tipo Dimensione Intervallo byte 8 bit da - 128 a 127 short 16 bit da - 32.768 a 32767 int 32 bit da - 231 a - 231 - 1 long 64 bit da - 263 a - 263 - 1 Scegliere quale tipo numerico intero impiegare, è semplice questione di esigenze. Il più utilizzato è int, che dispone di un intervallo adatto alla maggior parte dei casi. Il tipo byte è impiegato soprattutto quando si devono manipolare dei dati riposti in file binari (come le immagini ed i campioni sonori), che notoriamente sono suddivisi in blocchi di 8 bit ciascuno (8 bit = 1 byte). Il tipo long, che consuma molta memoria ma che copre un intervallo veramente vasto, è usato soprattutto in relazione alle date e agli intervalli temporali espressi in millisecondi. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tipo Dimensione Precisione float 32 bit Fino a 7 cifre dopo la virgola (singola precisione) double 64 bit fino a 16 cifre dopo la virgola (doppia precisione) I due domini si differenziano per la precisione con la quale possono effettuare calcoli in virgola mobile. Il tipo float, benché meno dispendioso di risorse, garantisce precisione sufficiente per un numero non elevato di cifre decimali. Per questo motivo, è impiegato soprattutto in applicazioni finanziarie, per la rappresentazione delle valute. I valori in Euro o in Dollari, infatti, di rado si spingono oltre i centesimi. Il tipo double, invece, garantisce un maggiore margine di precisione, e per questo ben si adatta alle applicazioni matematiche e scientifiche. Non a caso, molte delle funzionalità matematiche incorporate nei pacchetti base di Java lavorano espressamente con i valori double. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tipo Dimensione Descrizione char 16 bit Rappresenta un carattere Per rappresentare più di un carattere si utilizzano le “stringhe”, che non sono un tipo predefinito, ma una classe String. Esempio: char lettera = „a‟; \\ ammesso un solo carattere String nome = “Carlo”; \\ ammessi una successione di caratteri Per la rappresentazione dei caratteri java utilizza la codifica Unicode, e non la codifica ASCII Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tipo Dimensione Valori boolean 1 bit True/false Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Sequenza Significato \' Apice singolo \" Apice doppio \\ Barra retroversa \r Ritorno a capo \n Nuova riga \f Avanzamento modulo \t Tabulazione \b Backspace Alcuni caratteri che non possono essere digitati, vengono rappresentati attraverso le sequenze di escape. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) La coercision (o promozione) è una conversione che il linguaggio, in determinati casi, può eseguire automaticamente. In Tabella 7 sono riportate le conversioni implicite valide per i tipi predefiniti. Questo tipo di conversione automatica avviene quando non vi è perdita di dati, esempio si converte un tipo da dimensioni più piccole a dimensioni più grandi (da int a float). Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Tipo Conversione byte short, int, long, float, double short int, long, float, double int long, float, double long float, double float double double nessuna conversione implicita ammessa char int, long, float, double boolean nessuna conversione implicita ammessa Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) La conversione da un tipo più grande ad un tipo più piccolo, poiché potrebbe esserci una perdita di dati non avviene automaticamente (esempio da float a int), per far questo bisogna indicare esplicitamente la volontà di farlo. In java l‟operazione che permette di fare ciò prende il nome di casting, ossia la conversione esplicita. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Il casting è il meccanismo che consente al programmatore di indicare la conversione da un tipo ad un altro tipo. Esempio: int a = 5; byte b = (byte) a; float f = 2.5; int i = (int) f; Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Il Parsing, permette la conversione da “stringa” a tipi primitivi. Esempi: int i = Integer.parseInt("55") ; long l = Long.parseLong("924358725") ; float f = Float.parseFloat("3.14") ; double d = Double.parseDouble("7.123434534"); boolean b = Boolean.parseBoolean("true"); Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Conversione da stringhe a caratteri (String -> char) Per ottenere un caratterere di una stringa si usa il metodo .charAt(int posizione). Questo metodo restituisce il carattere nella posizione specificata. Attenzione che la prima posizione è 0. String s = "pippo" ; // prendo il primo carattere (posizione 0) char c1 = s.charAt(0) ; int lunghezza = s.length() ; char c2 = s.charAt(lunghezza - 1) ; // prendo l'ultimo caratterere (ultima posizione = lunghezza stringa meno uno) I metodi .length() e .charAt() sono metodi della classe String Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori sono i caratteri speciali che identificano particolari operazioni sui dati. Un operatore elabora una o più argomenti e produce un nuovo valore. Gli argomenti sono in forma diversa da quella di una comune chiamata di metodo, ma l‟effetto è identico. Quasi tutti gli operatori funzionano soltanto con i tipi primitivi; le eccezioni sono costituite da “=“, “==“ e “!=“, che funzionano con tutti gli oggetti e possono essere fonte di confusione. Inoltre la classe String supporta “+” e “+=“. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) = > < ! ~ ?: == <= >= != && || ++ + - * / & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>= Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Assegnazione L‟assegnazione viene eseguita mediante l‟operatore =, questa operazione significa prendere il valore sul lato destro, spesso indicato come rvalue, e copiarlo nel lato sinistro, spesso chiamato lvalue. Esempio: A = 4; In fase di chiamata di un metodo si fa ricorso all’Aliasing per cui per fare un operazione di assegnazione si procede nel seguente modo: y.c= ‘z’; Dove c e una variabiale di tipo char ed y è un metodo definito in precedenza. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori matematici di base sono gli stessi disponibili nella maggior parte dei linguaggi di programmazione: somma (+), sottrazione (-), divisione (/), moltiplicazione (*) e modulo (%). Da considerare che la divisione tra interi tronca il risultato. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Incremento e decremento automatico Java dispone di semplificazioni per rendere il codice di più facile digitazione, che però può risultare più o meno difficile da leggere. Le due semplificazioni più interessanti riguardano gli operatori di autoincremento (++) e di autodecremento (--). Esempio: Se a è un int l‟espressione ++a equivale a (a=a+1). Questi operatori non si limitano a modificare la variabile, ma producono come risultato il valore della variabile stessa. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Incremento e decremento automatico Esistono due versioni per ogni tipo di operatore, spesso denominate suffisse e postfisse. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori relazionali produno un risultato booleano valutando la relazione tra i valori degli operandi. Un‟espressione relazionale produce true (vero) se la relazione è vera e false (falso) se la relazione e falsa. Gli operatori relazionali sono minore di (<), maggiore di (>), minore o uguale (<=), maggiore o uguale (>=>, equivalente a (o uguale a , ==), diverso da (o non equivalente !=). Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) I tre operatori logici AND (&&) OR (||) e NOT (!) producono un valore boolean, true o false in base alla relazione logica tra gli argomenti. Questi operatori possono essere usati solo con valori boolean. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori bit a bit o bitwise consentono di manipolare singoli bit nei tipi interi primitivi ed eseguono operazioni booleane sui bit corrispondenti nei due argomenti per produrre il risultato. L‟utilizzo di tali operatori deriva dalla necessita di manipolare direttamente l‟hardware e impostare i bit nei registri hardware (programmazione a basso livello). L‟utilizzo di questi operatori è stato concepito in quanto alcuni decoder TV sono stati programmati in Java. In generale in Java l‟utilizzo degli operatori bit a bit non è diffuso. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori bitwise sono: AND (&) che restituisce 1 nel bit di output se entrambi i bit di input valgono 1 (uno); altrimenti 0 (zero). OR (|) che restituisce 1 (uno) nel bit di output se entrambi i bit se uno dei due bit di ingresso vale 1 (uno) e restituisce 0 (zero) se entrambi i bit valgono 0 (zero). XOR od OR esclusivo (^), restituisce 1 se solo uno dei due bit di ingresso vale 1. NOT (~) detto anche operatore di complemento a uno, e di tipo unario a differenza dei precedenti che erano di tipo binari. L’operatore bit a bit NOT (~) restituisce l’opposto del bit di input, 1 se il bit di input e 0, e 0 se il bit di input è 1. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Gli operatori di spostamento o di scorrimento (shift operator) consentono di manipolare anche i bit, e sono utilizzabili esclusivamente con tipi primitivi interi. L‟operatore di scorrimento a sinistra (<<) sposta a sinistra i bit dell‟operando sinistro, per un numero di posizioni pari al numero di bit specificato dall‟operando a destra dell‟operatore, inserendo valori 0 nei bit di ordine più basso. L‟operatore di scorrimento a destra (>>) sposta a destra i bit dell‟operando sinistro, per un numero di posizioni pari al numero di bit specificato dall‟operando a destra dell‟operatore. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) L‟operatore ternario if-else, è atipico poiché si serve di tre operandi. Si tratta di un operatore e non di un costrutto quando esso produce un valore. L‟espressione assume la seguente forma: Boolean-exp ? Value0 : value1 Se boolean-exp vale true, viene valutato value0 e il suo risultato diventa il valore prodotto dall‟espressione. Invece se booleanexp è false, viene valutato value1 e il suo risultato diventa il valore prodotto dall‟espressione. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Java consente un utilizzo speciale degli operatori, + e += possono essere usati per concatenare stringhe. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) All‟interno dei programmi Java possono essere inserite frasi contenenti commenti o annotazioni del programmatore, con le quali è possibile documentare il significato delle variabili o della costante utilizzate oppure la funzione svolta da una parte del programma. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) In Java vi sono tre forme per rappresentare i commenti. Commento di riga, utilizza i caratteri //, tutto wuello che viene scritto dopo questi caratteri e sulla stessa riga è considerato un commento , quindi non fa parte del codice. Questa modalità viene usata per i commenti brevi, esempio: int eta; // dichiarazione di una variabile intera Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) In Java vi sono tre forme per rappresentare i commenti. Commenti di sezione, la sua forma è la seguente: /* ……. …… …… */ Tutto il testo compreso tra i caratteri di inizio /* e quelli di termine */ sono considerati un commento. Questa forma consente di dividere il testo su più righe, per esempio: /* commento che occupa più righe */ Ai programmatori questa forma oltre che ad inserire commenti su più righe può essere utile nel caso in cui si voglia provare un programma escludendo momentaneamente una parte di codice. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) In Java vi sono tre forme per rappresentare i commenti. Commento di documentazione, la cui forma è la seguente: /** …. */ Rappresenta un commento di documentazione è può essere usato prima di dichiarare una classe o un metodo. Questa forma di documentazione è importante perché viene riconosciuta dagli strumenti per la generazione automatica della documentazione dei programmi. Esempio: /** Funzione per calcolare il MCD tra due numeri */ Public void calcolaMCD(int a, int b) { // istruzioni } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) L‟uso frequente delle frasi di commento deve diventare un‟abitudine del programmatore fin dai primi semplici esercizi: in questo modo possono essere costruiti programmi che si autodocumentano, e che possono essere compresi e letti facilmente a distanza di tempo, anche da persone diverse dal programmatore che ha scritto il programma. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Scrivere un programma in java che converta: Un numero di tipo float dato in input da tastiera, in un numero di tipo int; la prima lettera di una stinga data in input da tastiera in un char; l‟ultima lettera di una stinga data in input da tastiera in un char; Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Dato il seguente codice public classe Equivalence.java { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1 == n2); System.out.println(n1 != n2); } } Cosa produce in output il programma? Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Un programma acquisisce da tastiera in due variabili di tipo String il nome ed il cognome di una persona. Il programma deve restituire in output le due variabili concatenate. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Costruire la tavola di verità, facendo uso degli operatori. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Realizzare un programma che calcola il quoziente e il resto della divisione intera, utilizzando gli operatori / e % Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Realizzare un programma che calcola il quoziente e il resto della divisione intera, non utilizzando gli operatori / e % Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Di seguito viene listata una classe che aderisce ai requisiti richiesti: public class ClasseRichiesta { public static void main (String args []) { NumeroIntero uno = new NumeroIntero(); NumeroIntero due = new NumeroIntero(); uno.numeroIntero = 1; due.numeroIntero = 2; uno.stampaNumero(); due.stampaNumero(); } } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) Inoltre un costruttore per la classe NumeroIntero potrebbe impostare l‟unica variabile d‟istanza numeroIntero: public class NumeroIntero { public int numeroIntero; public NumeroIntero(int n) { numeroIntero = n; } public void stampaNumero() { System.out.println(numeroIntero); } } Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) In tal caso, però, per istanziare oggetti dalla classe NumeroIntero, non sarà più possibile utilizzare il costruttore di default (che non sarà più inserito dal compilatore). Quindi la seguente istruzione produrrebbe un errore in compilazione: NumeroIntero uno = new NumeroIntero(); Bisogna invece creare oggetti passando al costruttore direttamente il valore della variabile da impostare, per esempio: NumeroIntero uno = new NumeroIntero(1); Risposte alle due domande: 1. Trattasi di una variabile d‟istanza, perché dichiarata all‟interno di una classe, al di fuori di metodi. 2. Il valore sarà zero, ovvero il valore nullo per una variabile intera. Infatti, quando si istanzia un oggetto, le variabili d‟istanza vengono inizializzate ai valori nulli, se non esplicitamente inizializzate ad altri valori. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) L’istruzione System.out.println (n1 == n2) visualizza il risultato del confronto booleano posto all’interno delle parentesi. Il programma produce in output prima false e poi true. Il risultato non deve sorprendere in quanto ad un’attenta analisi il confronto con gli operatori == e != viene fatto non sui contenuti ma sui riferimenti, ed essi sono diversi, mentre il contenuto è identico. Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC) package algebra; public class Div { /** divisione intera per sottrazioni successive */ public static int div(int a, int b) { if( a == 0 || a < b ) return 0; } return div( a-b, b ) + 1; /** restodelladivisioneintera */ public static int mod(int a, int b) { if( a == 0 ) return 0; if( a < b ) } } return a; return mod( a-b, b ); Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)