Codice con switch

di il
32 risposte

Codice con switch

Buonasera ho questo codice
int wd = 0;
    String days [] ={"sun","mon","wed","sat"};
    for(String s :days) {
          switch (s) {
              case "sat":
              case "sun":
                  wd -=1;
                  break;
              case "mon":
                  wd++;
              case "wed":
                  wd+=2;
          }
    }
    System.out.println(wd);
compilandolo esce 3,però non capisco da dove esce fuori

32 Risposte

  • Re: Codice con switch

    E' facile dai. Dillo tu cosa esce in ognuno dei 4 casi e fai la somma finale.

    Ban per chi l'aiuta
  • Re: Codice con switch

    Allora secondo me fino al break wd vale -1,poi viene sommato di 1(wd++) e diventa 0 ed infine sommato di 2(wd+=2) quindi wd 2
  • Re: Codice con switch

    Quindi mettere un break sotto un case è inutile secondo te? O cambia qualcosa quando c'è e quando non c'è?
  • Re: Codice con switch

    maracaibo25 ha scritto:


    Allora secondo me fino al break wd vale -1,poi viene sommato di 1(wd++) e diventa 0 ed infine sommato di 2(wd+=2) quindi wd 2
    Hai studiato il fallthrough tra i case (in mancanza dei break)?
  • Re: Codice con switch

    andbin ha scritto:


    Hai studiato il fallthrough tra i case (in mancanza dei break)?
    No andbin cosa sono
  • Re: Codice con switch

    Weierstrass ha scritto:


    Quindi mettere un break sotto un case è inutile secondo te? O cambia qualcosa quando c'è e quando non c'è?
    Il break termina l'istruzione in cui è contenuta ed è opzionale
  • Re: Codice con switch

    maracaibo25 ha scritto:


    Weierstrass ha scritto:


    Quindi mettere un break sotto un case è inutile secondo te? O cambia qualcosa quando c'è e quando non c'è?
    Il break termina l'istruzione in cui è contenuta ed è opzionale
    Bene, quindi quando passa da "sat" che non c'è il break che succede?
  • Re: Codice con switch

    Weierstrass ha scritto:


    maracaibo25 ha scritto:


    Weierstrass ha scritto:


    Quindi mettere un break sotto un case è inutile secondo te? O cambia qualcosa quando c'è e quando non c'è?
    Il break termina l'istruzione in cui è contenuta ed è opzionale
    Bene, quindi quando passa da "sat" che non c'è il break che succede?
    Va da "sun" perché sat è vuoto è come se non ci fosse e wd vale -1
  • Re: Codice con switch

    maracaibo25 ha scritto:


    Va da "sun" perché sat è vuoto è come se non ci fosse e wd vale -1
    No, non "perché è vuoto" (potrebbe avere nmila istruzioni) ma perché non ha un break (o altra cosa che fa terminare proprio lo switch, es. un return, un throw).
    E quindi l'esecuzione continua a "fluire" verso il basso nel case successivo.

    Questo è il fallthrough (anche scritto fall-through) cioè il "cadere attraverso" (i case).
  • Re: Codice con switch

    maracaibo25" post_id="8636177" time="1573338093 ha scritto:


    Va da "sun" perché sat è vuoto è come se non ci fosse e wd vale -1
    E se è questo quello che pensi perché prima hai risposto 2 invece che 1?

    Andbin è molto gentile, ma se non ti metti a studiare prima di fare gli esercizi non vai da nessuna parte nemmeno col suo aiuto
  • Re: Codice con switch

    Weierstrass ha scritto:


    maracaibo25" post_id="8636177" time="1573338093 ha scritto:


    Va da "sun" perché sat è vuoto è come se non ci fosse e wd vale -1
    E se è questo quello che pensi perché prima hai risposto 2 invece che 1?
    Ho risposto 2 perché wd da "mon" vale 0 e da " wed" diventa 2
  • Re: Codice con switch

    maracaibo25 ha scritto:


    Ho risposto 2 perché wd da "mon" vale 0 e da " wed" diventa 2
    Prima del for wd vale 0. Ma poi hai un array di 4 elementi e un for-each sull'array. Quindi lo switch verrà eseguito 4 volte in cui per ciascuna volta si deve determinare il case di "entrata" e poi l'esecuzione fluisce da lì verso il basso ... fino a un break o la fine "naturale" dello switch.

    Quindi? Cosa deduci? Segui il flusso!!
  • Re: Codice con switch

    andbin ha scritto:



    Prima del for wd vale 0. Ma poi hai un array di 4 elementi e un for-each sull'array. Quindi lo switch verrà eseguito 4 volte in cui per ciascuna volta si deve determinare il case di "entrata" e poi l'esecuzione fluisce da lì verso il basso ... fino a un break o la fine "naturale" dello switch.

    Quindi? Cosa deduci? Segui il flusso!!
    Mi arrendo andbin sono 2 giorni che ci penso ma ritorno sempre al mio ragionamento, dimmi come si risolve cortesemente grazie
  • Re: Codice con switch

    maracaibo25 ha scritto:


    Mi arrendo andbin sono 2 giorni che ci penso ma ritorno sempre al mio ragionamento, dimmi come si risolve cortesemente grazie
    wd settato inizialmente a 0.

    4 cicli:
    - per "sun" fa wd -=1;
    - per "mon" fa wd++; E wd+=2;
    - per "wed" fa wd+=2;
    - per "sat" fa wd -=1;

    Partendo da 0, fai tutte le somme/sottrazioni e avrai il valore finale complessivo ....
Devi accedere o registrarti per scrivere nel forum
32 risposte