Syntaksi:
do
lause;
while (ehto);
Jälkiehtoinen toisto on muuten samankaltainen kuin alkuehtoinen toisto paitsi, että toistolause tehdään ainakin yhden kerran. Kuten jo varmasti huomasit do - while rakenteessa ensin testataan ja sitten tehdään. Loppuehtoisessa toistossa ensin tehdään ja sitten testataan. Kaikki mitä on todettu indeksimuuttujasta alkuehtoisen toiston yhteydessä, pätee myös loppuehtoisessa toistossa. Usein, mikäli toisto-ongelman luonne ei selvästi tuo toistorakenteen luonnetta selville, on makuasia, käyttäkö alkuehtoista vai loppuehtoista toistoa. Usein loppuehtoista toistoa pidetään selvempänä. Seuraavissa esimerkeissä on yritetty tuoda esiin paitsi do – while –rakenteen tavallisimmat käyttötavat, myös eroavaisuudet while -rakenteeseen.
Esimerkki 19.
import Lue.*;
public class e19
{
public static void
main(String args[])
{
String nimi,osoite;
System.out.println("Ohjelma
loppuu kun painat *-näppäintä");
do
{
System.out.println("Anna nimesi");
nimi =
Lue.rivi();
if (!nimi.equals("*"))
{
System.out.println("Anna osoitteesi");
osoite = Lue.rivi();
System.out.println(nimi+" "+osoite);
}
}while
(!nimi.equals("*"));
System.out.println("LOPPU");
}
}
Esimerkki 20.
import Lue;
public class e20 // Ohjelma kysyy merkkijonoa ja tutkii, onko se palindromi
{
public static void main(String args[])
{
String s;
char kaannettyJono[] = new char[40];
char jono[] = new char[40];
int i;
System.out.println("Anna merkkijono");
s=Lue.rivi();
jono = s.toCharArray();
if (s.length()!=0)
{
i = -1; // indeksimuuttujan alustus
do { // Tehdään käännetty jono
i++;
kaannettyJono[i]=Jono[s.length()-i-1];
} while (i<s.length()-1);
}
/* Testataan merkki keraallaan, onko samoja
* Testaus kaannettyJono=jono ei onnistu, ellei ole alusteta
* kaikkia varattuja muistipaikkoja. Voisi käyttää myös compareTo() -metodia!!!!
*/
boolean samoja=true;
i=0;
while( i<s.length())
{
if (kaannettyJono[i]!=jono[i])
samoja = false;
i++;
}
if (samoja)
System.out.println(" oli Palindromi");
else
System.out.println(" ei ollut
Palindromi");
}
}
Esimerkki e20a. Parannettu palindromiohjelma
import Lue;
public class e20a { // Ohjelma kysyy merkkijonoa ja
tutkii, onko se palindromi. poistetaan ensin
// jonosta muut merkit, paitsi kirjaimet
public static void
main(String args[]){
String s;
char kaannettyJono[] = new char[40];
char jono[] = new
char[40];
char apuJono[] = new char[40];
int poistettujaMerkkejä =
0;
int i;
System.out.println("Anna merkkijono");
s = Lue.rivi();
apuJono = s.toCharArray();
if (s.length()!=0) {
// kopioidaan taulukkoon
jono vain kirjaimet
int index =
0;
int paikka =
0;
while (index < apuJono.length)
{
if (apuJono[index] != '!' &&
apuJono[index] != ' '
&&
apuJono[index] != '?' &&
apuJono[index] != '-' &&
apuJono[index] != ',' &&
apuJono[index] != '.' &&
apuJono[index] != ';' &&
apuJono[index] != ':'
) {
jono[paikka] =
apuJono[index];
paikka++;
}else
poistettujaMerkkejä++;
index++;
} // while
i = -1;
// indeksimuuttujan alustus
do { // Tehdään käännetty
jono
i++;
kaannettyJono[i]=jono[s.length()-i-1-poistettujaMerkkejä];
} while (i<s.length()-1-
poistettujaMerkkejä);
}
/*
Testataan merkki keraallaan, onko samoja
*
Testaus kaannettyjono=jono ei onnistu, ellei ole alusteta
* kaikkia varattuja muistipaikkoja. Voisi
käyttää myös compareTo() -metodia!!!!
*/
boolean samoja = true;
i =
0;
while( i < s.length() - poistettujaMerkkejä) {
if (kaannettyJono[i]!=jono[i])
samoja = false;
i++;
}
if (samoja)
System.out.println(" oli Palindromi");
else
System.out.println(" ei ollut Palindromi");
}
}