3 – Vettori e Cicli do while

Un Vettore o array deve essere creato col comando new, si inizializza come una variabile stanziata ad oggetto di tipo Array()

var numeri = new Array();

Da notare che l’oggetto stanziato è di tipo Array con la A maiuscola. Tra le parentesi posso specificare dei parametri iniziali.

var numeri = new Array();
for (i=0; i<=1000; ++i)
    numeri[i]=Math.random();

In questo caso memorizzo nell’indice dell’array chiamato numeri[] il valore  del contatore i, generato casualmente per 1001 volte (ricordo che for guarda l’inizializzazione, poi la condizione, poi esegue lo script, al successivo passaggio esegue l’incremento). Pertanto numeri[] conterrà 1001 valori.

var numeri = new Array();
for (i=0; i<=1000; ++i)
    numeri[i]=Math.random();

for (i=0; i<=1000; ++i)
document.write(numeri[i]+'<br />');

La controprova è scrivere questi 1001 valori con un ulteriore ciclo for che usa il metodo write (ho aggiunto il tag <br /> per andare a capo). Possiamo inserire i valori anche manualmente

var numeri = new Array();
for (i=0; i<=2; ++i)
    numeri[i]=Math.random();
for (i=0; i<=2; ++i)
document.write(numeri[i]+'<br />');
document.write('-----------------<br />');
numeri[3] = 999;
for (i=0; i<=3; ++i)
    document.write(numeri[i]+'<br />');

Inserisco 3 valori nell’array col primo for, col secondo li stampo, scrivo una riga di divisione con un <br /> e infine aggiungo alla posizione 3 (il 4 valore considerando che il primo è uno zero) il numero 999. Stampo i 4 valori. Vediamo cosa succede se lascio un posto vuoto:

numeri[4] = 999;
for (i=0; i<=4; ++i)
    document.write(numeri[i]+'<br />');

Il quinto valore sarà 999 mentre il 4 che non è stato assegnato verrà restituito come undefined . Se nel mio ciclo voglio saltare la stampa dei valori undefined:

numeri[4] = 999;
for (i=0; i<=4; ++i)
    if (numeri[i] != null)
        document.write(numeri[i]+'<br />');

l’operatore != vuol dire diverso quindi con l’if condiziono la stampa solo se la posizione i è diversa da null .

Posso anche indicare in partenza il numero di elementi contenuti nel vettore:

var numeri = new Array(18);

ovviamente posso poi aggiungerne come abbiamo visto.

Vediamo l’ultimo modo per inizializzare un array

var numeri = new Array("rossi" , "verdi" , "" , "bianchi");

Ho costruito un array di stringhe con 3 valori ( numeri[2] ) passando i valori in fase di inizializzazione.

Vediamo la stampa di questo array approfittando per parlare del ciclo while .

var numeri = new Array("rossi" , "verdi" , "" , "bianchi");
var i = 0;
while (numeri[i] != "" )
document.write(numeri[i++] + '<br />');

nomi[i++] viene usato prima col primo valore , cioè zero, poi viene incrementato fino a quando è diverso da nullo, quindi fino al terzo valore.

Se c’ è un risultato, a livello logico, viene considerato true, mentre se è nullo o indefinito viene considerato false, di conseguenza la sintassi abbreviata del while può essere scritta in questo modo:

while (numeri[i] )

finché (while) i ha un valore è true e lo eseguo, altrimenti se è zero o null lo blocco perché false. Vediamo lo stesso esempio col do while :

var numeri = new Array("rossi" , "verdi" , "" , "bianchi");
var i = 0;
do
    document.write(numeri[i++] + '<br />');
while (numeri[i]);

La differenza è che l’espressione viene seguita almeno una volta.

Vediamo il costrutto if else :

var numeri = new Array(1,4,6,8,9);
for(i=0; i<=numeri.length; ++i)
    if (numeri[i]%2)
        document.write('dispari <br>');
else
    document.write('pari' + '<br>');

nel ciclo for il contatore i parte da zero e arriva fino alla lunghezza (lenght) dell’array cioè 4 (5 numeri). L’if  viene eseguito se è true quindi se il resto tra l’indice i e 2 da valore positivo (quindi dispari) se invece da zero l’if è false e viene seguito l’else.

var numeri = new Array(1,4,6,8,9,4,6,7);
for(i=0; i<numeri.length; ++i)
    if ( (numeri[i]==4) || (numeri[i]==6) )
        document.write('trovato alla posizione: ' + i + '<br>');

In questo esempio stampiamo il messaggio se il numero vale 4 o 6 (or si indica con ||). Da notare le parentesi tonde degli if e l’operatore vale (==).

var numeri = new Array(1,4,6,8,9,4,6,7);
for(i=0; i<numeri.length; ++i)
    if ( (numeri[i]>=4) && (numeri[i]<=7 ) )
        document.write('trovato alla posizione: ' + i + '<br>');

Nell’esempio usiamo l’operatore and ( && ) quindi stampiamo se l’i è uguale a 4 e minore e uguale 7

var numeri = new Array(1,4,6,8,9,4,6,7);
for(i=0; i<numeri.length; ++i)
    if ( ! (numeri[i]>=4) && (numeri[i]<=7 ) )
        document.write('trovato alla posizione: ' + i + '<br>');

Stesso esempi ma con uso del not ( ! ) quindi nego la condizione e stampo tutti i numeri diversi da prima.

switch

var colore = prompt("Qual'è il tuo colore preferito?");
switch (colore)
{
    case "Giallo": document.write("come il sole!");
    break;
    case "Rosso": alert("troppo violento!");
    colore=prompt("Dimmene un altro ...");
    break;
    default:
        document.write("Piace anche a me!");
        document.write("... davvero ...");
}

Nel case non c’è bisogno delle graffe per seguire più istruzioni perché c’è il break che interrompe. notare i due punti ( : ) che confronta la condizione del caso.

Il metodo prompt, apre un box con un campo di input nel quale l’utente può inserire del contenuto.