View Full Version : do-while schleife
do bzw weil schleifen , werden doch immer solange ausgeführt bis
eine bedingung nicht mehr zutrifft,
dieses prog http://mips.piranho.com/ hat aber nach do keine bedingung zum überprüfen :confused: :confused:
wozu dann überhaupt do?
Dimitrij
12-05-2002, 22:09
da steht doch eh ein paar mal while(...)
also
do
{
...
}while(...);
ja und? was hat das damit zu tun?
nur weil das programm absolut häßlich formatiert ist heißt das nicht dass die while's nicht da sind :D
habs zwar nicht probiert, aber sonst tät sich das ganze ja auch nicht kompilieren lassen.
//inneres do
while (multimode & i < laenge);
//äußere do-while schleife
while (i < laenge);
Wings-of-Glory
12-05-2002, 22:13
sicher hats sie die!
es sind zwei do-while schleifen in einander verschachtelt. Wenn du nochmal schaust siehst du die end-bedingung der do-while schleifen!
import eprog.*;
public class Runlen extends EprogIO
{ public static void main (String[] args) throws EprogException
{ boolean eingabefehler = false, singlemode = true, multimode = false;
String eingabepuffer = "",hochk="'";
int i=0,j=0,laenge=0,count=2;
char zeichen=' ',nextzeichen=' ';
StringBuffer ausgabepuffer = new StringBuffer();
{
eingabepuffer = readWord(); // Einlesen des Wortes
laenge = eingabepuffer.length();
if (laenge <= 30); // Laenge der eingabe Pruefen (Eingabe<=30)
else eingabefehler = true;
}
do { /* erstes do */
try {
zeichen = eingabepuffer.charAt(i++);
nextzeichen = eingabepuffer.charAt(i);
}
catch (IndexOutOfBoundsException e)
{;}
if (i == laenge)
{ nextzeichen = ' '; }
if (zeichen == nextzeichen) // Feststellen welcher Modus verwendet werden muss
{ multimode = true;
singlemode = false; }
else { singlemode = true;
multimode = false; }
if (singlemode & !eingabefehler) // Beginn und "End" des Singlemode
{ ausgabepuffer.append(zeichen); }
if (multimode & !eingabefehler) // Beginn des Multimode
{ ausgabepuffer.append(hochk);
do { /*zweites do*/
if (multimode)
{ ausgabepuffer.append(zeichen);
do { /*drittes do*/
try {
nextzeichen = eingabepuffer.charAt(++i);
}
catch (IndexOutOfBoundsException e)
{;}
if (i == laenge)
{ nextzeichen = ' '; }
if (zeichen == nextzeichen) { // Zaehlen der gleichen aufeinanderfolgenden Zeichen
count++; }
else {
if (count > 9)
{ eingabefehler = true; }
else { ausgabepuffer.append(count);
count = 2; } }
}
while (zeichen == nextzeichen);/*ende 3. do
{ zeichen = nextzeichen; // Pruefen ob wieder eine gleiche Zeichenreihe folgt
try {
nextzeichen = eingabepuffer.charAt(++i);
}
catch (IndexOutOfBoundsException e)
{;}
if (i == laenge)
{ nextzeichen = ' '; }
if (zeichen == nextzeichen);
else multimode = false;
}
}
}
while (multimode & i < laenge); /*ende 2. do*/
if (i < laenge)
{ ausgabepuffer.append(hochk); }
if (i <= laenge)
if (nextzeichen == ' ')
{ ausgabepuffer.append(hochk); }
if (!multimode)
{ ausgabepuffer.append(zeichen); }
}
}
while (i < laenge); // Ende der 1. Do-While Schleife
if (eingabefehler)
{ println("FALSCHE EINGABE"); }
else println(ausgabepuffer);
}
}
also ich kapier das noch immer nicht, ich dacht jede do und jedes while braucht eine bedingung ?
:confused:
naja die bedingung kommt nach dem while, in klammern und muss ein bool'scher ausdruck sein. übrigens, dieses edit an meinem vorigen posting hats nicht mehr rechtzeitig geschafft, da adsl wieder mal spinnt:
hoffe das hilft ;)
nur so am rand: do-while wirklich nur dann verwenden wenn der block mindestens einmal ausgeführt werden muss. ich war letztes semester auch beim kropatsch und ich weiß das er das teilweise ander
das eine bedingung in klammern steht etc weiss ich eh
aber unverständlich is f. mich ein do ohne bedingung
und dann ein while m bedingung, wo is der zusammenhang?
ich mein ein do ohne bedingung was macht das überhaupt?
ok, frage kapiert ;)
die syntax geht so:
do {
/* mach irgendwas, mindestens einmal */
} while ( <BEDINGUNG> );
die bedingung steht halt zum schluss, das hat - wie erwähnt - den sinn dass die schleife einmal auf jeden fall ausgeführt wird. du kannst dir das auch so vorstellen: while-schleifen überprüfen die bedingung bevor der code ausgeführt wird, do-while schleifen danach. um das deutlich zu machen sthet dann bei while die bedingung auch vorne, bei do-while hinten
"do" gibts ohne "while" nicht
aber while ohne do schon, oder??
ok danke sehr kenn mich jetzt aus :D
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.