Tipi di dato Fondamentali. Tipi numerici int: interi, senza parte frazionaria double: numeri in virgola mobile (precisione doppia) 1, -4, 0 0.5, -3.11111,

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

I tipi Strutturati.
LINGUAGGIO DI PROGRAMMAZIONE C
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Stringhe di caratteri In linguaggio C.
Costruttori e Distruttori
Package Utilizzo classi.
I DATI I PRINCIPALI TIPI DI DATO UTILIZZATI IN PROGRAMMAZIONE
Universita di Camerino
Capitolo 8 Array Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies srl.
Programmazione Ingegneria TLC
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Liste Ordinate 3 Maggio Ultima Lezione Abbiamo visto i tipi di dato astratti IntList e StringList Realizzano liste di interi e di stringhe Realizzati.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Laboratorio Matematica e Informatica
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 7 (5 novembre 2008) Programmazione in Java: lessico, variabili, tipi primitivi, assegnamento a variabile.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Variabili e tipi primitivi Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Array Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
Array Un array è una collezione in sequenza di variabili del medesimo tipo Riferimento con un nome comune Nome_studente1 Nome_studente2. Nome_studenteN.
Scomposizione di stringhe
Array Struttura numerate di dati. Memorizzare molti dati In informatica cè spesso bisogno di memorizzare ed elaborare un insieme costituito da molti dati.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
Capitolo 4 Tipi di dati fondamentali
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Dichiarazioni e tipi predefiniti nel linguaggio C
Java base I: Sintassi e tipi di dati
LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci.
Programmazione in Java
Programmazione in Java Claudia Raibulet
Programmazione in Java Claudia Raibulet
4 Tipi di dati & variabili
CODIFICA Da flow-chart a C++.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Sintassi base e struttura di un programma
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Tipi primitivi in java tipodefaultmem.daa booleanfalse1 bittrue false char'\u0000'16 bit byte08 bit short016 bit int032 bit-2^312^31-1.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Introduzione a Javascript
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Programmazione in Java
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (III)
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
30/10/01Array 1  Un array e’ una struttura dati che contiene piu’ valori del medesimo tipo.  La lunghezza di un array e’ stabilita quando l’array viene.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

Tipi di dato Fondamentali

Tipi numerici int: interi, senza parte frazionaria double: numeri in virgola mobile (precisione doppia) 1, -4, 0 0.5, , 4.3E24, 1E-14

Tipi numerici Una computazione su tipi numerici può causare overflow. Java: 8 tipi primitivi, che includono quattro tipi interi e due in virgola mobile int n = ; System.out.println(n * n); // stampa

Tipi primitivi TipoRange di valoriDimensione int –2,147,483, ,147,483,6474 bytes byte – byte short – bytes long 9,223,372,036,854,775, –9,223,372,036,854,775,807 8 bytes Continua…

Tipi primitivi TipoDescrizione dei valoriDim double Virgola mobile, precisione doppia. Range ± e 15 cifre decimali 8 bytes float Virgola mobile, precisione singola. Range ±10 38 e 7 cifre decimali 4 bytes char Caratteri nel sistema Unicode2 bytes booleanfalse e true 1 byte

Float e double Attenzione agli errori derivanti dagli arrotondamenti Non è ammesso assegnare un double (o float) ad un intero … non è C ! double f = 4.35; System.out.println(100 * f); // stampa double d = 13.75; int i = d; // Errore Continua…

Float e double Cast : per convertire un double ad un int è quindi necessario un cast Cast equivale a troncamento. Math.round arrotondamento static long round(double a) static int round(float a) int i = (int) d; // OK

Domande In quale caso il cast (long) x dà un risultato diverso da Math.round(x) ? Quale istruzione utilizzereste per arrotondare x:double al valore int più vicino?

Risposte Quando la parte frazionaria di x è 0.5 (int) Math.round(x) se assumiano che x è minore di 2 · 10 9

Stringhe Le stringhe sono oggetti Stringhe costanti Variabili di tipo stringa Lunghezza di una stringa La stringa vuota: "Hello, World!" String message = "Hello, World!"; int n = message.length(); ""

Concatenazione Utilizziamo loperatore + : Se uno degli argomenti delloperatore è una stringa, laltro argomento viene automaticamente convertito String name = "Dave"; String message = "Hello, " + name; // = "Hello, Dave" String a = "Agente"; int n = 7; String bond = a n; // bond = Agente007

Concatenazione in output Utile per ridurre il numero di istruzioni System.out.print : è equivalente a System.out.print("The total is "); System.out.println(total); System.out.println("The total is " + total);

Conversioni Da stringhe a numeri: Da numeri a stringhe int n = Integer.parseInt(str); double x = Double.parseDouble(x); String str = "" + n; str = Integer.toString(n);

Confronti s1 == s2 true se e solo se s1 e s2 sono riferimenti alla stessa stringa (come per tutti i tipi reference) s1.equals(s2) true se e solo se s1 e s2 sono stringhe uguali (case sensitive) s1.equalsIgnoreCase(s2) come sopra ma case insensitive s1.compareTo(s2) < 0 se s1 precede s2 in ordine lessicografico = 0 se s1 e s2 sono uguali > 0 se s1 segue s2 in ordine lessicografico Continua…

Confronti Attenzione Le chiamate a new creano sempre oggetti diversi, luso di costanti invece è ottimizzato str == str new String(str) == new String(str) str == new String(str) true false

Stringhe e array di caratteri Le stringhe non sono array di caratteri Esistono conversioni String char[] char[] String char data[] = {s, t, r } String s = new String(data) String s = str Char data[] = s.toCharArray()

Sottostringhe s.substring(i, j) restituisce la sottostringa di s dalla posizione i alla j-1 (estremi inclusi) s.substring(i) restituisce la sottostringa di s da i (incluso) al termine di s s.indexOf(s1) restituisce lindice della prima occorrenza di s1 in s ; -1 se non ci sono occorrenze s.indexOf(s1,i) lindice della prima occorrenza di s1 in s da i (incluso); -1 se non ci sono occorrenze Continua… String greeting = "Hello, World!"; String sub = greeting.substring(0, 5); // sub = "Hello"

Lettura da input System.in (lo standard input) offre supporto minimo per la lettura read(): lettura di una byte La classe Scanner di Java 5.0 permette di leggere da input in modo più strutturato Scanner in = new Scanner(System.in); System.out.print("Enter quantity: "); int quantity = in.nextInt(); Continua…

Lettura da input Metodi utili della classe Scanner nextDouble() legge un double nextLine() legge un linea la sequenza fino al primo newline nextWord() legge una parola la sequenza fino al primo spazio/tab/newline

File stringTester.java :

Gianni:Rossi:via Verdi 123:Milano:Italia Michele:Bugliesi:via Torino 155:Mestre:Italia:30173 Input Record 1 Field 1: Gianni Field 2: Rossi Field 3: via Verdi 123 Field 4: Milano Field 5: Italia Record 2... Output

Input da un Dialog Box

Converti le stringhe in numeri se necessario: La conversione lancia una eccezione se lutente non fornisce un numero Aggiungete System.exit(0) al metodo main di qualunque programma che usi JOptionPane String input = JOptionPane.showInputDialog(prompt) int count = Integer.parseInt(input);

Domande 15.Perché non possiamo leggere input direttamente da System.in ? 16.Supponiamo s sia un oggetto di tipo Scanner che estrae dati da System.in, e consideriamo la chiamata String name = s.next(); Quale è il valore della variabile name se lutente dà in input Hasan M. Jamil ?

Risposte 15.Possiamo, ma il tipo di System.in permette solo letture molto primitive (un byte alla volta).. 16.Il valore è Hasan".

Arrays Array Lists

Arrays Array: una sequenza di valori dello stesso tipo double[] data = new double[10]; Continua…

Arrays Al momento della allocazione, tutti i valori sono inizializzati ai valori di default del tipo base numeri: 0 booleani: false riferimenti: null

Arrays Accesso agli elementi mediante loperatore [ ] Lunghezza dellarray: data.length (N.B. non è un metodo) Indici compresi tra 0 e data.length - 1 data[2] = 29.95; data[10] = 29.95;// ERRORE: ArrayIndexOutOfBoundException

Domanda Quali elementi contiene larray al termine della seguente inizializzazione? double[] data = new double[10]; for (int i = 0; i < data.length; i++) data[i] = i * i;

Risposta ma non 100

Domanda Cosa stampano i seguenti comandi. Ovvero, se causano un errore, quale errore causano? Specificate se si tratta di un errore di compilazione o di un errore run-time. 1. double[] a = new double[10]; System.out.println(a[0]); 2. double[] b = new double[10]; System.out.println(b[10]); 3. double[] c; System.out.println(c[0]);

Risposta errore run-time error: indice fuori range 4.Errore compile-time: c non è inizializzato

Array bidimensionali Allatto della costruzione specifichiamo il numero di righe e di colonne: Per accedere un elemento, utilizziamo i due indici: a[i][j] final int ROWS = 3; final int COLUMNS = 3; (String[])[] board = new String[ROWS][COLUMNS]; board[i][j] = "x";

Copia di array Gli array sono oggetti, quindi lassegnamento tra array è un assegnamento di riferimenti double[] data = new double[10]; // fill array... double[] prices = data; Continua…

Copia di array

Copia di array – copia di elementi Continua… System.arraycopy(from, fromStart, to, toStart, count); Volendo duplicare gli elementi, il linguaggio fornisce metodi efficienti:

Copia di array – copia di elementi

Copia di elementi Array sorgente e destinazione possono coincidere System.arraycopy(data, i, data, i+1, data.length-i-1); data[i] = x;

ArrayLists La classe ArrayList gestisce una sequenza di oggetti A differenza degli array può variare in dimensione Fornisce metodi corrispondenti a molte operazioni comuni inserzione, accesso e rimozione di elementi, … Continua…

Array Lists La classe ArrayList è una classe parametrica (generica) ArrayList contiene oggetti di tipo T : size(): il metodo che calcola il numero di elementi nella struttura ArrayList accounts = new ArrayList (); accounts.add(new BankAccount(1001)); accounts.add(new BankAccount(1015)); accounts.add(new BankAccount(1022));

Accesso agli elementi get() Come per gli array gli indici iniziano da 0 errore se lindice è fuori range posizioni accessibili: 0.. size() – 1. BankAccount anAccount = accounts.get(2); // il terzo elemento dalla arraylist Continua…

Nuovi elementi set() sovrascrive un valore esistente add() aggiunge un nuovo valore, alla posizione i Oppure allultima posizione Continua… BankAccount anAccount = new BankAccount(1729); accounts.set(2, anAccount); accounts.add(i, a) accounts.add(a)

Nuovi elementi – add accounts.add(i, a)

Rimozione di elementi remove() rimuove lelemento allindice i accounts.remove(i)

Rimozione di elementi

Errori tipici Accesso fuori dai bounds indici legali 0..size()-1 int i = accounts.size(); accounts.get(i); // errore! accounts.set(i,anAccount); // errore! accounts.add(i+1,anAccount); // errore!

Domanda 3.Quale è il contenuto della struttura names dopo le seguenti istruzioni? ArrayList names = new ArrayList (); names.add("A"); names.add(0, "B"); names.add("C"); names.remove(1);

Risposta 3.contiene le stringhe " B " e " C " alle posizioni 0 e 1

Wrappers A differenza degli array, le arraylists possono solo contenere elementi di tipo reference È necessario quindi utilizzare le cosiddette classi wrapper che permettono di convertire valori primitivi in corrispondenti valori di tipo riferimento: Continua… ArrayList data = new ArrayList (); data.add(new Double(29.95)); double x = data.get(0).doubleValue();

Wrappers

Ci sono classi wrapper per ciascuno degli otto tipi primitivi

Auto-boxing Da Java 5.0, la conversione tra tipi primitivi e i corrispondenti tipi wrapper è automatica. Double d = 29.95; // auto-boxing; equivale a // Double d = new Double(29.95); double x = d; // auto-unboxing; equivale a // double x = d.doubleValue(); Continua…

Auto-boxing Auto-boxing opera anche allinterno delle espressioni aritmetiche Valutazione: auto-unbox d in un double aggiungi 1 auto-box il risultato in un nuovo Double Memorizza il riferimento nel wapper e Double e = d + 1;

Auto-boxing Attenzione! == è definito diversamente sui tipi primitivi e sul loro corrispettivo boxed == su interi significa uguaglianza di valori su integer significa identità di riferimenti Evitiamo luso di == sulle classi wrapper

Domanda Supponiamo che data sia un ArrayList di dimensione > 0. Come facciamo ad incrementare lelemento allindice 0?

Risposta data.set(0, data.get(0) + 1);

Array e for loops La soluzione tradizionale double[] data =...; double sum = 0; for (int i = 0; i < data.length; i++) { double e = data[i]; sum = sum + e; }

for each: un for generalizzato Itera su tutti gli elementi di una collezione ad esempio sugli elementi di una array Continua… double[] data =...; double sum = 0; for (double e : data) // per ciascun e in data" { sum = sum + e; }

for each Si applica nello stesso modo alle ArrayLists : ArrayList accounts =... ; double sum = 0; for (BankAccount a : accounts) { sum = sum + a.saldo(); }

for each Equivalente al seguente loop tradizionale: double sum = 0; for (int i = 0; i < accounts.size(); i++) { sum = sum + accounts.get(i).saldo(); }

Sintassi for (Type variable : collection) statement Esegue il corpo del ciclo su ciascun elemento della collezione La variabile è assegnata ad ogni ciclo allelemento successivo

for each – limitazioni La sintassi è deliberatamente semplice Si applica solo ai casi più semplici di gestione di collezioni. Spesso è necessario utilzzare la sintassi tradizionale Continua…

for each – limitazioni Non utilizzabile per scorrere due strutture allinterno dello stesso loop public static double dotProduct(double[] u, double[] v) { // assumiamo u.length == v.length; double sum = 0, for (x:u, y:v) sum = sum + x*y, } Continua… public static double dotProduct(double[] u, double[] v) { // assumiamo u.length == v.length; double sum = 0, for (int i=0; i<u.length; i++) sum = sum + u[i]*v[i]; return sum; }

for each – limitazioni Non sempre utilizzabile per inizializzazioni public static double dotProduct(double[] data) { int i = 0; for (x:data) { x = i*i; i++; } } Continua… public static double dotProduct(double[] data) { for (int i = 0; i<data.length; i++) data[i] = i*i; }

for each – limitazioni Iterazione su array bidimensionali tipicamente utilizziamo due cicli innestati: anche qui, il foreach non aiuta for (int i = 0; i < ROWS; i++) for (int j = 0; j < COLUMNS; j++) board[i][j] = " ";

Esercizio Definiamo una classe per rappresentare un polinomio a coefficienti reali Continua… c 0 + c 1 x + c 2 x 2 + … c n x n

Esempio Definiamo una classe per rappresentare una tabella bidimensionale dinamica, formata da un numero fisso di righe ed un numero variabile di colonne Continua…

Array e varargs Gli array possono essere utilizzati per passare liste di parametri di dimensione variabile class Lists { public static ArrayList toList (T[] arr) { ArrayList list = new ArrayList (); for (T el : arr) list.add(el); return list; } Continua… Lists.toList (new String[] {hello, world!} ); Lists.toList(new Integer[] {1,2,3,4} ); Metodo parametrico

Array e varargs Da java 5.0 lo stesso effetto si ottiene utilizzando la sintassi vararg vararg è una sintassi più sintetica per specificare argomenti, nel caso in cui lultimo argomento di in metodo sia un array

Array e varargs Passare argomenti diventa più agevole Lists.toList(hello, world!); Lists.toList(1,2,3,4); class Lists { public static ArrayList toList(T... arr) { ArrayList list = new ArrayList (); for (T el : arr) list.add(el); return list; }

Gioco del 15 Continua…

Gioco del 15 Due classi PuzzlePiece – i pezzi del puzzle PuzzleBoard – la tabella

PuzzlePiece – i pezzi del puzzle

PuzzleBoard – Interfaccia

PuzzleBoard – Rappresentazione

PuzzleBoard – Costruttore

Domanda Quale è la configurazione iniziale della tabella?

Risposta Questa

PuzzleBoard Metodi dellinterfaccia – move

PuzzleBoard Metodi dellinterfaccia – move

PuzzleBoard Metodi dellinterfaccia – win

PuzzleBoard Metodi ausiliari (privati) Continua…

PuzzleBoard Metodi ausiliari (privati)