Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

17.4.4 Erota funktion toiminta vaihe vaiheelta

Ennen ensimmäistä kutsua tilanne on seuraava:

pala                   jono
++                     +-------------------------------------+
||                     | |V|o|l|v|o| ||| | |1|2|3|0|0| ||| |1|
++                     +-------------------------------------+
 0                      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Ensimmäisessä kutsussa erota-funktio löytää etsittävän | -merkin paikasta 7. Merkit 0-6 kopioidaan funktion paluuarvoksi ja sitten jonosta tuhotaan merkit 0-7. Funktion paluuarvo sijoitetaan muuttujaan pala:

pala                   jono
+-------------+        +---------------------+
| |V|o|l|v|o| |        | | |1|2|3|0|0| ||| |1|
+-------------+        +---------------------+
 0 1 2 3 4 5 6          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Seuraavalla kutsulla (kerta 2) |-merkki löytyy jonosta paikasta 8. Nyt merkit jonon merkit 0-7 kopioidaan funktion paluuarvoon ja merkki 8 tuhotaan. Kutsun jälkeen tilanne on:

pala                   jono
+---------------+      +---+
| | |1|2|3|0|0| |      | |1|
+---------------+      +---+
 0 1 2 3 4 5 6          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Kolmannessa kutsussa merkkiä | ei enää löydy jonosta. Tämä ilmenee siitä, että find-metodi palauttaa arvon string::npos ( no position ), eli ei paikkaa. Näin koko jono kopioidaan funktion paluuarvoksi ja kutsun jälkeen tilanne on:

pala                   jono
+---+                  ++
| |1|                  ||
+---+                  ++
 0 1 2 3 4 5 6          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Vastaava toistuu neljännessä kutsussa, eli koko jono sitten kopioidaan paluuarvoksi ja tilanne on neljännen kutsun jälkeen:

pala                   jono
++                     ++
||                     ||
++                     ++
 0 1 2 3 4 5 6          0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Tämän jälkeen tilanne pysyy samana vaikka erota-funktiota kutsuttaisiin kuinka monta kertaa tahansa. Tästä saadaan se etu, että erota-funktiota voidaan turvallisesti kutsua kuinka monta kertaa tahansa, vaikkei jonosta enää palasia saataisikaan. Jos kutsua tehdään silmukassa, voidaan silmukan lopetusehdoksi kirjoittaa

	while ( !jono.equals("") ) {
	  pala = erota(jono,'|');
	  System.out.println(pala);
	}

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys