Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.12 switch - valintalause

Jäsenrekisteriohjelmamme päävalinta olisi näppärintä toteuttaa switch - lauseella:

menut_3\Naytto.java - päävalinta switch -lauseella

	  /**
	   * Silmukka jossa odotetaan näppäint ja suoritetaan vastaava toiminto.
	   * 0:n painaminen lopettaa silmukan ja palaa kutsuvaan ohjelmaan.
	   * @return palauttaa 0 jos kaikki meni hyvin, 1 jos tuli virhe
	   */
	  public int paavalinta() {
	    char nappain;
	
	    while ( true ) {
	
	      paamenu();
	
	      nappain = IO.odota_nappain("?012345",IO.EI_OLETUSTA,IO.MERKKI_ISOKSI);
	
	      switch (nappain) {
	        case '?': avustus(nappain);                break;
	        case '0': return 0;
	        case '1': lisaa_uusi_jasen(nappain);       break;
	        case '2': etsi_jasenen_tiedot(nappain);    break;
	        case '3': tulosteet(nappain);              break;
	        case '4': tietojen_korjailu(nappain);      break;
	        case '5': paivita_jasenmaksuja(nappain);   break;
	        default : tulosta("Näin ei voi käydä!");  return 1;
	      }
	
	    }
	  }

switch - lauseessa case osien lopuksi break on yleensä välttämätön. break estää suorittamasta seuraavia rivejä.

Joskus harvoin breakin puuttumista voidaan käyttää hyväksi, mutta tällöin pitää olla todella tarkkana:

java-silm\Switch.java - swicth, jossa break tahallaan jätetty pois

	  public static int swicth_testi(int x,int operaatio) {
	    switch (operaatio) {
	      case 5:                 /* Operaatio 5 tekee saman kuin 4 */
	      case 4: x *= 2; break;  /*           4 laskee x=2*x       */
	      case 3: x += 2;         /*           3 laskee x=x+4       */
	      case 2: x++;            /*           2 laskee x=x+2       */
	      case 1: x++; break;     /*           1 laskee x=x+1       */
	      default: x=0; break;    /* Muut nollaavat x:än            */
	    }
	    return x;
	  }

Lause default suoritetaan jos mikään case- osista ei ole täsmännyt (tai tietysti jos jokin break puuttuu). default- lauseen ei tarvitse olla viimeisenä, mutta tällöin vaaditaan taitavaa breakin käyttöä, siis paras pitää default viimeisenä!

Yleistä switch- lausetta ei voi korvata joukolla if- lauseita käyttämättä goto- lausetta. Mikäli kuitenkin jokaisen case rakenteen perässä on break, voidaan switch- korvata sisäkkäisillä if- else - rakenteilla.

Tehtävä 10.17 switch - > if

Kirjoita Switch.java ohjelmanpätkä käyttäen if- rakenteita muuttamatta itse suoritettavia lauseita.

Tehtävä 10.18 Päävalinta

Kirjoita paavalinta käyttäen vain if ja else rakenteita.

Tehtävä 10.19 lääni, versio 2

Kirjoita laani- aliohjelma käyttäen Switch- rakennetta.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys