Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.6 do- while - silmukka

Aikaisemmin olemme tutustuneet erääseen algoritmiin selvittää onko luku alkuluku vai ei. Koska algoritmi on valmis, voimme kirjoittaa vastaavan ohjelman (% - operaattori antaa jakojäännöksen, 10 % 3 == 1 ):

java-alk\Alkuluku.java - testataan onko luku alkuluku

	**
	 *  Ohjelmalla testataan onko_alkuluku-aliohjelmaa
	 *  @author Vesa Lappalainen
	 *  @version 1.0, 17.01.2002
	 */
	public class Alkuluku {
	
	  /**
	   * Aliohjelmalla tutkitaan onko parametrina tuotu
	   * luku alkuluku vai ei<br>
	   * Algoritmi: Jaetaan tutkittavaa lukua jakajilla 2,3,5,7...luku/2.
	   * Jos jokin jako menee tasan, niin ei alkuluku:
	   * @param luku tutkittava luku
	   * @return tieto siitä, onko luku alkuluku vai ei
	   */
	  public static String onko_alkuluku(int luku)
	  {
	    int jakaja=2, kasvatus=1;
	    if ( luku == 2 ) return "alkuluku";
	
	    do {
	      int jakojaannos = luku % jakaja;
	      if ( jakojaannos == 0 )
	        return "jaollinen";
	      jakaja += kasvatus;
	      kasvatus = 2;
	    } while ( jakaja < luku/2 );
	
	    return "alkuluku";
	  }
	
	  public static void main(String[] args) {
	    String tulos;
	    tulos = onko_alkuluku(25);
	    System.out.println(tulos);
	    tulos = onko_alkuluku(123);
	    System.out.println(tulos);
	    tulos = onko_alkuluku(7);
	    System.out.println(tulos);
	  }
	}

Käytimme tässä silmukkaa:

	do 
	  lause 
	while (ehto); 

Koska esimerkin silmukassa oli useita suoritettavia lauseita, oli lauseet suljettu lausesuluilla. Jälleen voi olla hyvä tapa käyttää AINA lausesulkuja.

Huomautus! Silmukoiden kanssa on syytä olla tarkkana sekä 1. kierroksen että viimeisen kierroksen kanssa. Myös silmukan lopetusehdon on syytä muuttua silmukan suorituksen aikana.

Eräs tyypillinen esimerkki do- while silmukan käytöstä olisi seuraava:

java-silm\Dowhile.java - lukujen lukeminen kunnes halutulla välillä

	import fi.jyu.mit.ohj2.Syotto;
	/**
	 * Ohjelmalla luetaan luk, kunnes se on halutulla välillä
	 * @author Vesa Lappalainen
	 * @version 1.0, 07.02.2003
	 */
	public class Dowhile {
	
	  public static void main(String[] args)  {
	    int luku;
	    do {
	      luku = Syotto.kysy("Anna luku väliltä [0-20]",0);
	    } while ( luku < 0 || 20 < luku );
	    System.out.println("Annoit luvun " + luku);
	
	  }
	}


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys