• Non ci sono risultati.

Tipi e array in Java

N/A
N/A
Protected

Academic year: 2021

Condividi "Tipi e array in Java"

Copied!
27
0
0

Testo completo

(1)

Tipi e array in Java

Paolo Bison

Fondamenti di Informatica 1 A.A. 2004/05

Universit`a di Padova

(2)

Tipo di dato - I

 elementi del linguaggio (es. variabili, costanti, espressioni) sono associati ad un tipo che li caratterizza

 tipo definito da:

 un insieme di valori che l’elemento può assumere

 un insieme di operazioni che possono essere applicate a tali valori

 notazione sintattica per le costanti

(3)

Tipo di dato- II

 tipo INTEGER

- valori: insieme dei numeri interi I

- operazioni: operatori aritmetici (+, -, /, *) e funzioni (abs(x))

- costanti: sequenze di cifre (345)

 verifica di tipo (type checking)

 conversioni di tipo

 linguaggi

- tipizzati (procedurali, Java)

- non tipizzati (Lisp, Smalltalk)

(4)

Dichiarazione in Java

 dichiarazione esplicita degli identificatori a

 variabili

type id List ;

 parametri

type id

 valore di ritorno

type id ( [ lista par formali ] ) blocco

a

opzionale in BeanShell, si usi il comando setStrictJava(true); per ren-

derla obbligatoria

(5)

Dichiarazione di variabile

 una variabile deve essere dichiarata prima del suo uso

 dichiarazione all’interno di un blocco

 ambito di validità locale {int i,k; i=k=m;}

 in BeanShell dichiarazione nel workspace

(6)

Tipo

 tipi primitivi

 interi

 reali

 caratteri

 logici

 classi

(7)

Interi

 rappresentazione valori interi in complemento a 2 byte 8 bit -128 : 127

short 16 bit -32768 : 32767

int 32 bit -2147483648 : 2147483647

long 64 bit -9223372036854775808 : 9223372036854775807

 operatori: aritmetici (+ - * / %), relazione ed uguaglianza

 costanti

[ 0 | 0x | 0X ] seq cifre [ l|L ]

123 0XFFF 29 29L 0377 0

 variabili

byte k; int i,j,k; long l;

k=111; i=0xffff; l=32L;

(8)

Reali

 rappresentazione di valori reali in formato IEEE 754 float 32 bit

double 64-bit

 operatori: aritmetici (+ - * /), relazione ed uguaglianza

 costanti

seq cifre [ . seq cifre ] [ e|E seq cifre ][ f|F ] 123.0 0.10e4f 0.0f 0.0

 variabili

float x,y; double ll; x=10.0f;

ll=3.10e-2;

 errori di arrotondamento

x = 0 puó essere falso, meglio | x |≤ 

(9)

Caratteri

 insieme di simboli rappresentati in Unicode 16 bit char 16-bit Unicode 0 : 65535

 operatori di relazione ed uguaglianza

 costanti

carattere

’A’ ’%’ ’0’

 rappresentazione \

\’ \n \r \ddd

\" \t \f \uXXXX

\\ \b

 variabili

char c; c=’w’;

(10)

Logici

boolean

 valori di verità

 operatori: uguaglianza, logici

 costanti

true false

 variabili

boolean f,g,p;

f=false; g=a>b; p=g==f;

(11)

Inizializzazione delle variabili

 implicita

 esplicita

 espr. assegnazione

 in dichiarazione

id = espr

int i,k=100; float f=3.5f;

(12)

Conversioni di tipo

 implicita

1. char → int

2. tipi interi → float 3. float → double

 esplicita (type cast)

( tipo ) espressione

(13)

Tipo void

 rappresenta un insieme vuoto di valori

 void

 valore di ritorno di un metodo per definire una procedura

void azzera(){x=y=z=0;}

(14)

Istruzione for

 ciclo indefinito

 sintassi

for ( [ initlist] ; [ expr ] ; [updatelist ] ) istr

 initlist e updatelist

liste di “expression statement”

 espr

espressione logica

(15)

Semantica del for

 definita in termini di ciclo while

initlist ;

while ( expr ){

istr ;

updatelist ; }

for(s=0,i=1;i<=n;i=i+1) s=s+i;

for(;;) { k=k-1;n=n+1; }

(16)

Istruzioni continue e break

 continue

 termina la corrente iterazione di un ciclo

 esempio: somma numeri pari fino a N

 break

 termina il ciclo

 esempio: P N

i=1 i + P N −1

i=1 i

(17)

Operatori auto-(in/de)cremento

 operatori unari applicabili ad identificatori di tipo interi

 postfissi

id ++ id − −

prima si valuta, poi si (in/de)crementa e si assegna

 prefissi

++ id − − id

prima si (in/de)crementa e si assegna, poi si valuta

 “expression statement”

diventano istruzione se seguiti da ;

i++; − − j; a=a++;

(18)

Espressione condizionale

 sintassi

pred ? espr1 : espr2

 semantica

se il valore del predicato pred è true si valuta espr1 altrimenti espr2

 ?: operatore ternario

 esempi

x>=0 ? x : -x

x>y ? (x>z ? x : z) : (y>z ? y : z) n=k>y ? k-y : y-k;

if (k>y)n= k-y; else n=y-k;

(19)

Array

 tipo strutturato

 un insieme di M elementi accessibili attraverso un indice numerico di solito compreso tra 0 e M-1

 multidimensionali

ciascun elemento è a sua volta un array

(20)

Array (monodimensionali) in Java

 oggetti che contengono un insieme M di variabili tutte dello stesso tipo T (tipo base)

 ciascuna variabile associata ad un indice intero tra 0 e M-1

 M definito alla creazione dell’array M=0 ⇒ array vuoto

 tipo array Es.: T[]

se int tipo base ⇒ int[] tipo dell’array

se float tipo base ⇒ float[] tipo dell’array

(21)

Dichiarazione

 variabili

int[] a; int b[];

long c,d[]; long[] c,d;

double[] nc;

 parametri formali

void m(char[] c,float[] num)

 valore di ritorno

double[] comb(double[] x, double[] y)

 identificatori individuano un riferimento all’array

(22)

Creazione

 creazione dell’array come insieme di M elementi

 operatore new []

new tipo [ espr ]

 numero componenti dato dal valore di espr

 Es.:

new char[128]

new int[2*k]

new double[256]

 assegnazione per associare un identificatore di tipo T[] ad un array di tipo base T

int[] aa;

aa=new int[34];

(23)

Creazione di una array int[] aa;

aa=new int[56];

riferimento int[]

aa

...

int[56]

(24)

Inizializzazione

 variabili di tipo array possono essere inizializzate in dichiarazione

 sintassi

{ lista espr }

 numero espressioni dà il numero delle componenti ciascuna inizializzata al valore della corrispondente espressione

 Es.:

int[] iarray= { 1,2,3 } ;

long[] nn= { n,2*n,3*n,4*n } ;

double[] cc= { 3.1514,-0.6e-7 } ;

(25)

Accesso componenti

 operatore []

array ref [ espr ]

 valore di espr da l’indice della componente

 Esempi:

nn[i]=mm[k]+ll[k+1];

(creaArray(10))[k-n]=5;

 Index Out Of Bound

valore di espr non compreso tra 0 e M-1

 dimensione di una array

arrayRef .length

for(i=0;i<nn.length;i++) nn[i]=i;

(26)

Array multidimensionali

 uso iterato di []

int[][] mat= {{ 2,3,3 } , { 1,2 }} ; double[][][] matC;

mat = new int[20][34];

 accesso

 id

l’intero array

 id [ espr ]

componente nella prima dimensione

 id [ espr ][ espr ]

componente nella seconda dimensione

 ....

(27)

Precedenza degli operatori

postfissi [] ( parametri ) id ++ id -- prefissi ++ id -- id + espr - espr ! creazione/conv. tipo new ( tipo ) espr

moltiplicativi * / \%

additivi + -

relazionali < > <= >=

uguaglianza == !=

AND &

XOR ˆ

OR |

AND condizionale &&

OR condizionale ||

condizionale ?:

assegnazione =

Riferimenti

Documenti correlati

Tipi strutturati, Paolo Bison, FI08, 2008-09-29 – p.17. user-defined type

Fondamenti di Informatica Ingegneria Meccanica. Università di

Il metodo main dovrà creare una finestra di output sullo schermo, intitolarla “Scrittore”, e scrivere nella finestra il messaggio “Programma dimostrativo”.. Una volta scritta

Arricchire inoltre il codice del metodo main in modo che scriva il messaggio “io sono lo standard output” sullo standard output (cioè usando l’oggetto System.out).. Esercizio

invece non causa errori di compilazione, ma, in base al commento, dovrebbe restituire un risultato esatto della divisione tra 1000 e b, mentre al momento restituisce un risultato in

Esercizio 1 Dire cosa visualizza il seguente frammento di codice, motivando la risposta. Segnalare tali errori e

Scrivere il codice della classe Esame, e scrivere inoltre il codice di una classe ProvaEsame che consente, attraverso il suo metodo main, di inserire un appello di esame e tutti

• Un costruttore che consente di definire una nuova TabellaVoti; il costruttore deve prendere in ingresso un array di stringhe che definisce la sequenza dei nomi degli studenti,