Ciclo while

Esempio potenze di 2 fino a 2^n
public class PotenzeDi2
{
	public static void main (String[] args)
	{
		final int N = Integer.parseInt(args[0]);
 
		int val = 1;
		int i = 0;
 
		while (i <= N)
		{
			System.out.println(i + " "+ val);
			val *= 2;
			i++;
		}
	}
}
Esecuzione
  • 0 1
  • 1 2
  • 2 4
  • 3 8
  • 4 16

Do while

  • Si comporta esattamente come il while ma la condizione di uscita viene verificata alla fine dell’esecuzione del corpo del ciclo
public class PotenzeDi2DoWhile
{
	public static void main (String[] args)
	{
		final int N = Integer.parseInt(args[0]);
 
		int val = 1;
		int i = 0;
 
		do
		{
			System.out.println(i + " "+ val);
			val *= 2;
			i++;
		} while (i <= N);
	}
}

Ciclo for

  • E’ un costrutto alternativo al while che fornisce piĂą flessibilitĂ  nella realizzazione di cicli
Sintassi
for (<inizializzazione>; <espressione booleana>; <incremento>)
{
	<istruzioni>
}
 
for (<inziializzaione>; <espressione booleana>; <incremento>)
	<istruzione>;

Lo schema è il seguente:

  1. Inizializza la variabile “di controllo”
  2. Esegue il testi d’uscita sull’espressione booleana
  3. Esegue il corpo del for
  4. Alla fine di ogni ciclo incrementa/decrementa il valore della variabile di controllo come specificato

Equivalenza dell’istruzione con il while

for (<inzializzaione>; <espressione booleana>; <incremento>)
	<istruzione>;
Equivale a
<inzializzaione>;
while (<espressione booleana>)
{
	<istruzioni>;
	<incremento>;
}

Uscire da un ciclo

Indipendentemente dal tipo di ciclo, può essere necessario uscire dal ciclo durante l’esecuzione del suo corpo attraverso l’istruzione break
  • break può essere usato solo all’interno di un ciclo
public class StampaPrimeNCifre
{
	public void StampaPrimeNCifre (final String s, final int N)
	{
		int conta = 0;
		for (int k = 0; k < s.enght(); k++)
		{
			char c = s.charAt(k);
			if (Character.isDigit(c))
			{
				Syste,.out.print(c);
				cont++;
				if (conta == N)break;
			}
		}
	}
 
	public static void main (String[] args)
	{
		new StampaPrimeNCifre().stampaPrimeNCifre("acsvjchdjvfdv", 3);
	}
}

Uscire da cicli annidati

  • L’istruzione break permette di uscire solo dal ciclo corrente se non si specifica un’etichetta
  • Come fare nel caso in cui si voglia uscire da una sequenza di cicli annidati?
  • Si può specificare un’etichetta prima di un ciclo e uscire da quel ciclo con break etichetta
outer:
for (int i = 0; i < h> i++)
{
	for (int = 0; j < w; j++)
	{
		//codice	
		if (j == 1) break outer;
	}
}

Break vs return

  • L’istruzione return interrompe l’esecuzio del metodo
  • L’istruzione break interrompe l’esecuzione di un ciclo for, while, do…while

Saltare all’iterazione successiva

  • Può essere utile saltare all’iteazione successiva
public class StampaPrimeNCifre
{
	public void StampaPrimeNCifre (final String s, final int N)
	{
		int conta = 0;
		for (int k = 0; k < s.lenght(); k++)
		{
			char c = s.charAt(k);
			if (Character.isDigit(c)) continue; //Salta questa iterazione
			{
				Syste,.out.print(c);
				cont++;
				if (conta == N)break;
			}
		}
	}
 
	public static void main (String[] args)
	{
		new StampaPrimeNCifre().stampaPrimeNCifre("acsvjchdjvfdv", 3);
	}
}

Array

  • Rappresenta un gruppo di variabili tutte dello steso tipo
  • Gli array sono oggetti
    • Quindi le variabili di array contengono il riferimento all’array
  • Gli elementi di un array possono essere tipo primitivi oppure riferimenti a oggetti

Esempio di array: creazione senza valori

  • Dichiarazioni: `int[] a;
  • Creazione senza valori
a = new int[10]

  • Dichiarazioni con valori
a = new int[] {5, -2, 3, 0, 1, -6, 75, 32, 122, 4};