M3 - Programació estructurada / Continguts UF1: Estructura alternativa
De wikiserver
Condicional if
- Permet decidir si en funció d’una condició cal o no executar una o un conjunt d’instruccions.
instruccions del programa
if (expressió booleana) {
Instruccions per executar si l’expressió avalua a true (cert)
}
resta d’instruccions del programa
- La condició te dues respostes possibles: Certa o Falsa. Si és certa s’executarà el procediment i sinó no
- S’executarà i la execució continuarà amb les sentencies que hi hagi a continuació del bloc if.
Exemple:
import java.util.Scanner;
public class MajorEdat {
public static void main(String[] args) {
//Decidir si una persona es major de edat.
final int MAJOREDAT = 18;
int edat;
Scanner lector = new Scanner(System.in);
System.out.print("Quina edat tens? ");
edat = lector.nextInt();
if (edat >= 18){
System.out.println("Ets major d'edat");
}
if (edat < 18){
System.out.println("Ets menor d'edat");
}
}
}
- Si entre els parèntesis es posa una expressió que no avalua un resultat de tipus booleà, hi haurà un error de compilació.
Condicionals else i else if
import java.util.Scanner;
public class MajorEdat {
public static void main(String[] args) {
//Decidir si una persona es major de edat.
final int MAJOREDAT = 18;
int edat;
Scanner lector = new Scanner(System.in);
System.out.print("Quina edat tens? ");
edat = lector.nextInt();
if (edat >= 18){ // S'executa si la condició de l'if és falsa
System.out.println("Ets major d'edat");
}
else{
System.out.println("Ets menor d'edat");
}
}
}
// Si necessitem comprovar un altre valor de l'edat podem utilitzar elif
import java.util.Scanner;
public class MajorEdat {
public static void main(String[] args) {
//Decidir si una persona es major de edat.
final int MAJOREDAT = 18;
int edat;
Scanner lector = new Scanner(System.in);
System.out.print("Quina edat tens? ");
edat = lector.nextInt();
if (edat >= 18){ // S'executa si la condició de l'if és falsa
System.out.println("Ets major d'edat");
}
else if (edat >= 16) { // es comprova només si la condició de l'if és falsa
System.out.println("Ets adolescent i menor d'edat");
}
else{ // S'executa només si la condició de l'elif és falsa
System.out.println("Ets menor d'edat");
}
}
}
- Es poden posar tants else if com necessitem
La sentència ”switch”
- Quan l’avaluació d’una expressió és de tipus enter o caràcter.
- Millora la llegibilitat del codi
- Es poden executar de manera consecutiva més d'un bloc.ondicions.
Sintaxi i comportament
- Es basa en una paraula clau seguida d’una condició entre parèntesis i un bloc de codi entre claus
- La paraula clau case seguida del valor i de dos punts indica les instruccions assignats a cada cas.
- A paritr del case que avalua a cert s'executaran tots els blocs d'instruccions fins a trobar el delimitador break.
- Al final de tots els apartats se’n posa un d’especial (opcional), anomenat default.
switch(expressió de tipus enter, caràcter o text) {
case valor1:
instruccions si l’expressió avalua a valor1
(opcionalment) break;
case valor2:
instruccions si l’expressió avalua a valor2
(opcionalment) break;
...
case valorN:
instruccions si l’expressió avalua a valorN
(opcionalment) break;
(opcionalment ) default:
instruccions si l’expressió avalua a algun valor que no és valor1...valorN
(opcionalment) break;
}
- Els valors no han de seguir cap ordre concret.
- Quan s'arriba a una sentencia break: el programa se salta la resta d’apartats i continua amb la instrucció posterior a la sentència switch
- Si no hi ha instrucció break al final d'un bloc s'executaran les instruccions dels següents blocs fins trobar-ne algun bloc que acabi en break. La figura següent mostra aquest comportament tan particular.
- A partir de la versió 7 de Java es pot fer servir un String (text) per a avaluar l’expressió
- Exemple: Traduir un número de mes a text
public class TraduccioMes {
public static void main(String[] args) {
int mes;
Scanner teclat = new Scanner(System.in);
System.out.println("Introdueixi el número de mes a traduir: ");
mes = teclat.nextInt();
switch (mes) {
case 1:
System.out.println("Traducció: Gener\n");
break;
case 2:
System.out.println("Traducció: Febrer\n");
break;
case 3:
System.out.println("Traducció: Març\n");
break;
case 4:
System.out.println("Traducció: Abril\n");
break;
case 5:
System.out.println("Traducció: Maig\n");
break;
case 6:
System.out.println("Traducció: Juny\n");
break;
case 7:
System.out.println("Traducció: Juliol\n");
break;
case 8:
System.out.println("Traducció: Agost\n");
break;
case 9:
System.out.println("Traducció: Setembre\n");
break;
case 10:
System.out.println("Traducció: Octubre\n");
break;
case 11:
System.out.println("Traducció: Novembre\n");
break;
case 12:
System.out.println("Traducció: Desembre\n");
break;
default:
System.out.println("No existeix un mes amb número: " + mes);
}
}
}