Diferència entre revisions de la pàgina «M3 - Programació estructurada / Continguts UF1: Estructura alternativa»
De wikiserver
(→Control d’errors en l’entrada bàsica mitjançant estructures de selecció) |
|||
(Hi ha 11 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 1: | Línia 1: | ||
+ | ==Condicional if== | ||
+ | |||
+ | *Permet decidir si en funció d’una condició cal o no executar una o un conjunt d’instruccions. | ||
+ | |||
+ | <source lang="java"> | ||
+ | instruccions del programa | ||
+ | if (expressió booleana) { | ||
+ | Instruccions per executar si l’expressió avalua a true (cert) | ||
+ | } | ||
+ | resta d’instruccions del programa | ||
+ | </source> | ||
+ | |||
+ | *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: | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | * 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''' | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang="java"> | ||
+ | // 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"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | *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. | ||
+ | |||
+ | ===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'''. | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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; | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | *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. | ||
+ | |||
+ | [[Imatge:m3uf1_switch.png |600px|center| Switch]] | ||
+ | |||
+ | :*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''' | ||
+ | <source lang="java"> | ||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | <!-- | ||
+ | |||
+ | |||
==Estructures de selecció== | ==Estructures de selecció== | ||
Línia 493: | Línia 693: | ||
La instrucció associada a una cadena de text no existeix, ja que qualsevol dada escrita pel teclat sempre es pot interpretar com a text. Per tant, la lectura mai no pot donar error. | La instrucció associada a una cadena de text no existeix, ja que qualsevol dada escrita pel teclat sempre es pot interpretar com a text. Per tant, la lectura mai no pot donar error. | ||
+ | |||
+ | L’exemple anterior amb control d’errors ens quedaria així : | ||
+ | <source lang="java"> | ||
+ | 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: "); | ||
+ | if (teclat.hasNextInt()) { | ||
+ | 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); | ||
+ | } | ||
+ | } else { | ||
+ | System.out.println("Introdueix un número enter, inutil!!!"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | --> |
Revisió de 18:35, 6 oct 2020
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.
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);
}
}
}