Diferència entre revisions de la pàgina «M3 - Programació estructurada / Continguts UF1: Estructura alternativa»

De wikiserver
Dreceres ràpides: navegació, cerca
(Condicional if)
 
(Hi ha 2 revisions intermèdies del mateix usuari que no es mostren)
Línia 99: Línia 99:
  
 
==La sentència ”switch”==
 
==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ó==
  

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.
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
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);
      }
   }
}